zoj2750(最短路径)
来源:互联网 发布:dota2天梯各分段 知乎 编辑:程序博客网 时间:2024/05/16 08:52
题目大意:成语接龙,从第一个到最后一个点的最短路径
//选择建图的方式真的很重要,偷个懒,用dfs#include<cstdio>#include<iostream>#include<cstring>using namespace std;struct Edge{ int to,w,next;} edges[1000000];const int mn=1001;int n,m,w[mn];char s[100],a[mn][5],b[mn][5];//a记录前4个字母,b记录后4个字母int vis[mn];//记录一条路径上的结点int dis[mn];//记录距离int head[mn];void add(int i,int j){ edges[m].to=j; edges[m].w=w[i]; edges[m].next=head[i]; head[i]=m++;}void dfs(int i){ for(int j=head[i]; ~j; j=edges[j].next) { int v=edges[j].to; if(dis[v]>dis[i]+edges[j].w) { dis[v]=dis[i]+edges[j].w; vis[v]=1; dfs(v); vis[v]=0; } }}int main(){ while(~scanf("%d",&n)&&n) { for(int i=0; i<n; ++i) { scanf("%d%s",w+i,s); int len=strlen(s); memcpy(a[i],s,4); memcpy(b[i],s+len-4,4); } //建图 memset(head,-1,sizeof(head)); m=0; for(int i=0; i<n; ++i) for(int j=0; j<n; ++j) if(i!=j&&!strcmp(b[i],a[j]))//i不等于j并且i到j可以直接连接 add(i,j); memset(vis,0,sizeof(vis)); memset(dis,6,sizeof(dis)); dis[0]=0; vis[0]=1; dfs(0); if(dis[n-1]==dis[1000]) printf("-1\n"); else printf("%d\n",dis[n-1]); } return 0;}
阅读全文
1 0
- zoj2750(最短路径)
- hdoj3790_最短路径问题(最短路径)
- 最短路径问题(最短路径)
- 最短路径(java)
- 最短路径 (yp)
- HDU1874(最短路径)
- POJ2387(最短路径)
- 图(最短路径)
- 迪杰斯特拉(最短路径)
- 最短路径(Dijkstra)
- 最短路径(未完成)
- HDU3665Seaside(最短路径)
- 最短路径(Dijkstra)
- dijkstra(最短路径)
- 最短路径(迪杰斯特拉)
- Floyd最短路径(多源最短路径)
- hdu3709(最短路径路径dijkstra)
- hdoj2544_最短路(最短路径)
- 使用JQuery,但不使用JQuery validate 来验证表单非空情况
- 大数据
- mybatis之入门到开发(四)之 Mapper动态代理方式
- 查询Sql Server数据库的作业的信息
- linux下追查线上问题常用命令
- zoj2750(最短路径)
- mariadb增量备份
- 如何在CSDN转载别人的博客
- Git中文乱码问题(win 7)
- 贪心,括号序列(Rikka with Parenthesis II,HDU 5831)
- property-placeholder源码解析
- JAVA薪资计算
- php.ini
- 11. Servlet 文件上传