poj3767 I Wanna Go Home
2012-08-21 17:14
225 查看
#include<stdio.h> #include<string.h> #include<stdlib.h> #define Max 0xfffffff int m[610][610],p[610]; bool vis[610]; bool leader[610]; int vexnum,arcnum; void dijkstra() { int i,j,k,t,min; memset(vis,0,sizeof(vis)); for(i=1;i<=vexnum;++i) p[i]=m[1][i]; for(vis[1]=k=1;k<vexnum;++k){ for(min=Max,i=1;i<=vexnum;++i) if(!vis[i]&&min>p[i]){ min=p[i]; t=i; } vis[t]=1; for(i=1;i<=vexnum;++i) if(!vis[i]&&p[i]>min+m[t][i]) p[i]=min+m[t][i]; } } int main() { int i,j,t,a,b,w; while(scanf("%d",&vexnum),vexnum&&scanf("%d",&arcnum)){ for(i=1;i<=vexnum;++i) for(j=1;j<=vexnum;++j) m[i][j]=m[j][i]=Max; for(i=0;i<arcnum;++i){ scanf("%d%d%d",&a,&b,&w); if(w<m[a][b]) m[a][b]=m[b][a]=w; } for(i=1;i<=vexnum;++i){ scanf("%d",&t); leader[i]=t-1; } for(i=1;i<=vexnum;++i) for(j=1;j<=vexnum;++j){ if(leader[i]!=leader[j]){ if(leader[i]) m[i][j]=Max; else m[j][i]=Max; } } dijkstra(); if(p[2]<Max) printf("%d\n",p[2]); else printf("-1\n");//忘加了一个“-1”,贡献了一个WA } system("pause"); return 0; }
//稍微变化一下的dijktra
相关文章推荐
- POJ3767----I Wanna Go Home
- POJ3767 I Wanna Go Home dijkstra
- 九度 题目1162:I Wanna Go Home
- poj 3767 I Wanna Go Home
- POJ-3767 I Wanna Go Home -----有限制的dijkstra
- 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)
- 题目1162:I Wanna Go Home
- POJ 3767 I Wanna Go Home(Dijkstra)
- POJ 3767 I Wanna Go Home (dijkstra算法)
- 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)
- POJ 3767 I Wanna Go Home【最短路,Dijkstra+spfa,题意是关键呀】
- POJ 3767 I Wanna Go Home
- 九度 oj 题目1162:I Wanna Go Home
- 九度OJ-1162:I Wanna Go Home
- 题目1162:I Wanna Go Home
- POJ 3767 I Wanna Go Home
- Jobdu 题目1162:I Wanna Go Home
- poj 3767 I Wanna Go Home
- POJ - 3767 - I Wanna Go Home
- 题目1162:I Wanna Go Home