nyoj 115 城市平乱

来源:互联网 发布:淘宝促销模块代码 编辑:程序博客网 时间:2024/04/30 01:53

http://acm.nyist.net/JudgeOnline/problem.php?pid=115

dijstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

思路:以叛乱城市为起点,寻找最短的驻部队城市

#include<stdio.h>#include<string.h>#define INT_MAX 1<<29int map[1005][1005];int m,n,s[105];int dijstra(int beg){bool flag[1005];int path[1005];int min,x,i;    for(i=1;i<=m;i++){flag[i]=true;path[i]=INT_MAX;}flag[beg]=false;path[beg]=0;x=m-1;while(x--){for(i=1;i<=m;i++)if(map[i][beg]){if(path[i]>map[i][beg]+path[beg])path[i]=map[i][beg]+path[beg];}min=INT_MAX;for(i=1;i<=m;i++){if(min>path[i]&&flag[i]){min=path[i];beg=i;}}flag[beg]=false;}min=INT_MAX;for(i=1;i<=n;i++){if(min>path[s[i]])min=path[s[i]];}return min;}int main(){int t,p,q,i,j,a,b,c,min;scanf("%d",&t);while(t--){memset(map,0,sizeof(map));scanf("%d%d%d%d",&n,&m,&p,&q);for(i=1;i<=n;i++)scanf("%d",&s[i]);while(p--){scanf("%d%d%d",&a,&b,&c);if(map[a][b])map[a][b]=map[b][a]>c?c:map[a][b];elsemap[a][b]=map[b][a]=c;}printf("%d\n",dijstra(q));}return 0;}


 

原创粉丝点击