当前位置: 首页 > wzjs >正文

商家自己做的商品信息查询网站网络营销课程作业

商家自己做的商品信息查询网站,网络营销课程作业,兼职做网站在那里接任务,四川学校网站建设看到这一题我的第一个思路就是双向bfs 起点是a,终点还是a,但是flag是相反的(“越”的方向) tip1.可以用字典vis来存储flag 刚开始初始化时vissta,visend一个对应0、1 要求两个队列相…

看到这一题我的第一个思路就是双向bfs

起点是a,终点还是a,但是flag是相反的(“越”的方向)

tip1.可以用字典vis来存储flag

刚开始初始化时vissta,visend一个对应0、1                                        

要求两个队列相接的时候flag要相同

tip2.get_nei函数

读取输入的时候用字典存储了点之间的关系

那么get_nei的时候就需要返回可能的下个节点以及new_flag

                                    new_flag还是在外面判断,因为读取输入的时候是用0表示同向,1表示反向

tip3.存储中间过程

由于触碰点是起点和终点中间,所以我们需要记录前驱节点从而进行回溯

那么最适合的就是链表

from collections import deque,defaultdictd=defaultdict(set)n=int(input())for i in range(n):a,n1,b,n2=input().split()if n1==n2:d[a].add((b,0))#明显不能双向:否则会Yu 1 Yuci 0 Yuci 0 Yu 0 = Yu 1 Yu 0#d[b].add((a,0))#双向图?else:d[a].add((b,1))#d[b].add((a,1))def get_nei(cur):neis=d[cur]return neisdef bfs(k):sta=end=kstaq=deque([sta])endq=deque([end])vissta={sta:1}#用0,1表示相对性visend={end:0}presta={sta:None}#记录前驱节点preend={end:None}while staq and endq:ls=len(staq)le=len(endq)if ls<=le:for _ in range(ls):#当前层cur=staq.popleft()flag=vissta[cur]for nei,k in get_nei(cur): #解包if k:nflag= flag #0,1间取反else:nflag=not flagif nei not in vissta:vissta[nei]=nflagstaq.append(nei)presta[nei]=curif nei in visend and visend[nei]==vissta[nei]:return build_path(nei,presta,preend)else:for _ in range(le):cur=endq.popleft()flag=visend[cur]for nei,k in get_nei(cur):if k:nflag=not flag #0,1间取反else:nflag=flagif nei not in visend:visend[nei]=nflagendq.append(nei)preend[nei]=curif nei in vissta and vissta[nei]==visend[nei]:return build_path(nei,presta,preend)return 0def build_path(meet,presta,preend):path_sta=[]cur=meetwhile cur is not None:#开始链表回溯path_sta.append(cur)cur=presta[cur]path_sta.reverse()#掉头,方面后面衔接path_end=[]cur=preend[meet]while cur is not None:path_end.append(cur)cur=preend[cur]return path_sta+path_endprint(d)for i in d:k=bfs(i)print(k)'''不能dfs:不知道何时停止
def dfs()
'''

但是这段代码其实是错的,因为d[x]存的是x后面的节点,是单向的,那么就用不了双向 

from collections import deque
from collections import defaultdictd = defaultdict(list)n = int(input())
for _ in range(n):a, a_flag, b, b_flag = input().split()a_flag = int(a_flag)b_flag = int(b_flag)d[(a, a_flag)].append((b, b_flag))shortest_path = Nonenodes = set()
for key in d:nodes.add(key[0])for b, _ in d[key]:nodes.add(b)
nodes = list(nodes)for sta in nodes:for start_flag in [0, 1]:target_flag = 1 - start_flagvissta = {}staq = deque()staq.append((sta, start_flag, []))vissta[(sta, start_flag)] = Truefound = Falsewhile staq and not found:cur, flag, path_edges = staq.popleft()if cur == sta and flag == target_flag:if shortest_path is None or len(path_edges) < len(shortest_path):shortest_path = path_edgesfound = Truebreakfor (nei, nei_flag) in d.get((cur, flag), []):if (nei, nei_flag) not in vissta:vissta[(nei, nei_flag)] = Truenew_path = path_edges + \[(cur, flag, nei, nei_flag)]staq.append((nei, nei_flag, new_path))if found and len(shortest_path) == 0:break if shortest_path and len(shortest_path) == 0:break output_steps = []
for step in shortest_path:a, a_flag, b, b_flag = stepoutput_steps.append(f"{a} {a_flag} {b} {b_flag}")sta = shortest_path[0][0]
start_flag = shortest_path[0][1]
end_flag = 1 - start_flagprint(f"{' '.join(output_steps)} = {sta} {start_flag} {sta} {end_flag}")

http://www.dtcms.com/wzjs/393833.html

相关文章:

  • 网站建设 调研报告网站关键词怎么添加
  • 营销型网站建设大概多少钱百度搜索一下就知道
  • 国内做卷学习网站汕头seo按天付费
  • 建设一个电影网站需要多少钱游戏推广文案
  • mac os 做网站合肥网站推广公司
  • 个人做网站需要什么资料免费网站服务器
  • 普通银行卡可以做国外网站购物信用卡使用吗seo研究中心倒闭
  • 淘宝联盟链接的网站怎么做的厦门seo排名优化
  • 网络公司怎么做网站百度账号怎么注册
  • 荆州网站建设价格深圳信息公司做关键词
  • 网站建设与维护选择题长沙关键词自然排名
  • er图关于网站建设新闻发布的网站
  • 做视频课程网站郑州seo公司排名
  • 宁德市城乡建设局网站登封seo公司
  • 苹果手机免费做ppt模板下载网站有哪些比较有名的个人网站
  • 做视频网站 视频放在哪里百度免费资源网站
  • 标准营销型网站定做价格免费b站在线观看人数在哪里找到
  • 济南网站建设需要多少钱百度排行榜风云榜小说
  • 用阿里云搭建WordPress深圳推广优化公司
  • 家乡网站建设策划书日本比分预测
  • 深圳市外贸网站东莞seo建站优化工具
  • 网站建设与管理ppt课件百度云盘如何优化seo
  • 404页面模板谷歌外贸seo
  • 深圳网络推广收费标准短视频seo营销
  • 东盟建设投资有限公司网站seo网络推广培训班
  • 番禺网站建设番禺网络营销今日新闻事件
  • 禹州做网站bz3399西安百度竞价代运营
  • 桐乡住房和城乡规划建设局网站百度推广效果怎么样
  • 专业中山建网站公司百度广告一天多少钱
  • 企业网站设计需要了解郑州网站设计有哪些