hdu 2112 HDU Today(最短路+字典树)
2013-12-02 21:32
441 查看
这题有点儿恶趣味了。
1、起点和终点可能是同一点。
2、起点和终点可能根本不会在图里出现。
1、起点和终点可能是同一点。
2、起点和终点可能根本不会在图里出现。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define N 155 #define inf 0x3f3f3f3f int map ,dis ,vis ; int cnt; char s1 ,s2 ; struct node { int flag; node *next[256]; }*root; void Init(node *s) { s->flag=0; memset(s->next,0,sizeof(s->next)); return ; } int InsertTree(char *s) { int ln=strlen(s); node *ss,*e; ss=root; for(int i=0;i<ln;i++) { int temp=s[i]; if(ss->next[temp]==NULL) { e=(node *)malloc(sizeof(node)); Init(e); ss->next[temp]=e; } ss=ss->next[temp]; if(i==ln-1&&ss->flag==0) ss->flag=cnt++; if(i==ln-1) return ss->flag; } return 0; } void Free(node *root) { for(int i=0;i<256;i++) { if(root->next[i]!=NULL) Free(root->next[i]); } free(root); return ; } int main() { int n; while(scanf("%d",&n),n!=-1) { int flag1,flag2,flag3; flag1=flag2=flag3=0; root=(node *)malloc(sizeof(node)); Init(root); cnt=1; scanf("%s%s",s1,s2); InsertTree(s1); InsertTree(s2); if(cnt==2) flag1=1; memset(map,0x3f,sizeof(map)); while(n--) { int x,y,k; scanf("%s%s%d",s1,s2,&k); x=InsertTree(s1); y=InsertTree(s2); if(x==1||y==1) flag2=1; if(x==2||y==2) flag3=1; if(k<map[x][y]) map[x][y]=map[y][x]=k; } memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); for(int i=1;i<cnt;i++) dis[i]=map[1][i]; dis[1]=0;vis[1]=1; for(int i=1;i<cnt;i++) { int v=1,temp=inf; for(int j=1;j<cnt;j++) { if(!vis[j]&&dis[j]<temp) { v=j; temp=dis[j]; } } vis[v]=1; for(int j=1;j<cnt;j++) if(dis[j]>dis[v]+map[v][j]) dis[j]=dis[v]+map[v][j]; } if(flag2==0) printf("-1\n"); else if(flag1==0&&flag3==0) printf("-1\n"); else if(flag1==1) printf("0\n"); else if(dis[2]<inf) printf("%d\n",dis[2]); else printf("-1\n"); Free(root); } return 0; }
相关文章推荐
- HDU 2112 HDU Today 字典树+最短路dijkstra算法
- HDU 2112 HDU Today(最短路 SPFA Floyd-Warshall算法)
- HDU 2112 HDU Today(最短路)
- HDU 2112 HDU Today (最短路)
- hdu 2112 HDU Today 最短路
- HDU--杭电--2112--HDU Today--最短路
- hdu 2112 HDU Today 最短路(Dijkstra算法)
- HDU-2112 HDU Today(最短路[Dijkstra])
- 【hdu 2112】 HDU Today ( 最短路 Dijkstra)(map)
- 【hdu 2112】 HDU Today ( 最短路 Dijkstra)0x3f3f3f3f
- HDU - 2112 HDU Today(map建图+最短路)
- 【HDU】-2112-HDU Today(最短路)
- HDU 2112 HDU Today (最短路(dijkstra邻接矩阵) + hash + 二分)
- HDU 2112 HDU Today(最短路)
- hdu 2112 HDU Today 最短路spfa+容器map
- hdu 2112 HDU Today( 最短路)
- hdu 2112(最短路+字典树)
- hdu-2112 HDU Today(最短路)
- HDU 2112 HDU Today(最短路,dijkstra)
- hdu 2112 HDU Today 字典树+Dijkstra