最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 60637 Accepted Submission(s): 26704
输入保证至少存在1条商店到赛场的路线。
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
基本思路:最短路的裸题(可以当做模板题)
已经AC过的代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3
int map[110][110],dis[110],visited[110];
void Dijkstra(int n,int x)
{
int min,p;
memset(visited,0,sizeof(visited));
memset(dis,0,sizeof(dis));
for(int i=1;i<=n;i++)
{
dis[i]=map[1][i];
visited[i]=0;
}
visited[x]=1;
for(int i=1;i<=n;i++)
{
min=INF;
for(int j=1;j<=n;j++)
{
if(!visited[j]&&dis[j]<min)
{
p=j;
min=dis[j];
}
}
visited[p]=1;
for(int j=1;j<=n;j++)
{
if(!visited[j]&&dis[p]+map[p][j]<dis[j])
{
dis[j]=dis[p]+map[p][j];
}
}
}
}
int main()
{
int m,n,a,b,c;
while(scanf("%d %d",&n,&m)&&n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
Dijkstra(n,1);
cout<<dis[n]<<'\n';
}
return 0;
}