hdu 1874 畅通工程续

来源:互联网 发布:java oracle证书有用吗 编辑:程序博客网 时间:2024/04/29 17:57

水题,但是要注意处理重边的情况,因为一开始没处理,结果wa了很多次。



#include <stdio.h>#include <string.h>#define INIMAX 0x7f7f7f7fint dist[210];int S[210];int M,N;int Graph[205][205];void dijk(int begin){memset(S,0,sizeof(S));for(int i = 0;i < N;++i){dist[i] = Graph[begin][i];}dist[begin] = 0;S[begin] = 1;int k;for(int i = 1;i < N; ++i){int min = INIMAX;for(int j  = 0; j < N; ++j){if(!S[j]&&dist[j]  < min){min = dist[j];k = j;}}S[k] = 1;for(int j = 0;j < N; ++j){if(!S[j]&& dist[j] > dist[k] + Graph[k][j]){dist[j] = dist[k] + Graph[k][j];}}}return;}int main(int argc, char *argv[]){//FILE *fp;//fp = freopen("in1.txt","r",stdin);int x,y,di;int begin,end;while(~scanf("%d%d",&N,&M)){for(int i = 0; i < N;++i) {for(int j = 0; j < N;++j)Graph[i][j] = INIMAX;}for(int i = 0; i < M; ++i){scanf("%d%d%d",&x,&y,&di);if(Graph[x][y] > di){Graph[x][y] = di;Graph[y][x] = di;} }scanf("%d%d",&begin,&end);dijk(begin);if(dist[end] != INIMAX)printf("%d\n",dist[end]);elseprintf("-1\n");}return 0;}







原创粉丝点击