赤裸裸的dijkstra 。。。。。。。。。。
求单源最短路径
就是题意很难读懂
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
样例的第一个5是指有5条路,第二个5是指有5个地点
1 2 20指从1到达2的距离为20
求从1到达5的最短路径长度
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int street[1010][1010];
int dist[1010];
bool visited[1010];
int main()
{
int t,n;
scanf("%d %d",&t,&n);
for (int i = 1; i <=n; i++)
{
for (int j = 1; j <=n; j++)
{
street[i][j]=INT_MAX;
}
}
while(t--)
{
int a,b,val;
scanf("%d %d %d",&a,&b,&val);
if(val<street[a][b])
{
street[a][b]=val;
street[b][a]=val;
}
}
//输入完毕,邻接矩阵street,接下来使用dijkstra即可
for(int i=2;i<=n;i++)
{
dist[i]=INT_MAX;
}
dist[1]=0;
memset(visited,false,sizeof(visited));
while (true)
{
int mini=-1;
for(int i=1;i<=n;i++)//找到mini
{
if(visited[i])
{
continue;
}
if(mini==-1||dist[mini]>dist[i])
{
mini=i;
}
}
if(mini==n)//已找到终点
{
break;
}
//对mini进行扩展
visited[mini]=true;
for(int i=1;i<=n;i++)
{
if(street[mini][i]!=INT_MAX&&dist[i]>dist[mini]+street[mini][i])
{
dist[i]=dist[mini]+street[mini][i];
}
}
}
printf("%d\n",dist[n]);
return 0;
}