算法作业 用“分支限界法” 求解代码~~急~~

yiyi2007 2011-07-13 12:50:21

输入数据的第一行为一个整数n(1≤n≤26),表示中转站的数量,中转站的名字由一个大写字母组成(A-Z),输入数据读到EOF结束。

以下n行,每行表示一个中转站的网络连接关系。

A:BCD

表示A中转站分别与B、C、D中转站相邻。

A:

表示A中转没有其它相邻的中转站。

相邻是一种对称关系,即A相邻于B,那么B也相邻于A。

任务: 每个中转站必须使用与相邻的中转站不同的频谱。
给定一个中转站网络,请你计算出最少需要的频谱数量。

输入示例1 输出示例1

2 1

A:

B:
输入示例2 输出示例2
A:BC 3

B:ACD

C:ABD

D:BC
输入示例3 输出示例3
A:BCD 4

B:ACD

C:ABD

D:ABC

...全文
229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
libralibra 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yiyi2007 的回复:]

没看懂啊~~
好像不是用C++写的吧
能解释一下吗??
[/Quote]
不是c++,是python
获得每个当前行邻接基站,然后删除freqs(已经赋值的频率)这个字典里面存在的
剩下的如果是0,那就是他跟前面freqs字典了的所有都不邻接,用一个前面已经有点
否则当前curnum+1赋值给它,并将对应关系加入freqs字典








论坛签名======================================================================

MATLAB,VB,python程序编写

请加我QQ: 790404545

如果不在线,请把程序要求,算法,测试图等相关资料发到我qq邮箱
790404545@qq.com

向插件原作者Tim(q107770540)表示感谢
ff007bit 2011-07-14
  • 打赏
  • 举报
回复
阿门...
yiyi2007 2011-07-14
  • 打赏
  • 举报
回复
没看懂啊~~
好像不是用C++写的吧
能解释一下吗??
caocaoma 2011-07-13
  • 打赏
  • 举报
回复
求解释
libralibra 2011-07-13
  • 打赏
  • 举报
回复
我好闲啊

结果
================
Input1 Output1
2 1
A:
B:
================
Input2 Output2
4 3
A:BC
B:ACD
C:ABD
D:BC
================
Input3 Output3
4 4
A:BCD
B:ACD
C:ABD
D:ABC


代码:
#! /usr/bin/env python

def getMap(fname):
# get relationship maps
# input:
# fname: file name
# return:
# num: number of relation
# pos: a dict like A:BC
# txt: a list of lines in input file
txt = open(fname,'r').read().split('\n')
num = txt[0]
pos = dict()
for c in txt[1:]:
pos[c.split(':')[0]] = c.split(':')[1]
return (num,pos,txt)

def getNum(pos):
# get frequency number as needed
# input:
# pos: a dict with relationship maps
# return:
# the numebr needed
# can be modified to return the map
pospool = set(pos)
freqs = {}
curnum = 0
for c in pospool:
if len(freqs)==0:
curnum += 1
freqs[c] = curnum
elif pos[c]=='':
freqs[c] = curnum
else:
related_pos = pos[c]
non_connect = [x for x in freqs.keys() if x not in pos[c]]
if len(non_connect)==0:
curnum += 1
freqs[c] = curnum
else:
freqs[c] = freqs[non_connect[0]]
return max(freqs.values())


def main():
fnames = ['data1.txt','data2.txt','data3.txt']
for i in xrange(len(fnames)):
print '================'

# get relationship maps
num,pos,txt = getMap(fnames[i])

# get the frequency needed
freqs_num = getNum(pos)

# print result
print 'Input'+str(i+1)+'\tOutput'+str(i+1)
print txt[0]+'\t'+str(freqs_num)
print '\n'.join(txt[1:])


# unit test
if __name__=='__main__':
main()
libralibra 2011-07-13
  • 打赏
  • 举报
回复
请google地图着色算法,跟这个好像一样
至善者善之敌 2011-07-13
  • 打赏
  • 举报
回复
最后一顶,,,,,

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧