今天学了迪杰斯特拉算法,正好可以解决最短路径的问题。
在做这道题的时候使用了迪杰斯特拉算法,就把这道题给解决了
题目链接:题目连接
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f
int t[1010][1010];
int a,b;
bool tis[1010];
int l[1010];
void Djsta(int st)
{
int sun;
for(int i=1;i<=a;i++)
{
l[i]=t[i][st];
}
memset(tis,false,sizeof(tis));
tis[st]=true;
for(int i=1;i<=a;i++)
{
int r=INF;
int q;
for(int j=1;j<=a;j++)
{
if(!tis[j]&&l[j]<r)
{
r=l[j];
q=j;
}
}
tis[q]=true;
for(int j=1;j<=a;j++)
{
if(!tis[j])
{
if(l[q]+t[q][j]<l[j])
{
l[j]=l[q]+t[q][j];
}
}
}
}
}
int main()
{
int m,n,p;
while(scanf("%d %d",&a,&b)!=EOF)
{
for(int x=1;x<=a;x++)
{
for(int y=1;y<=a;y++)
{
if(x==y)
{
t[x][y]=0;
}
else
{
t[x][y]=INF;
t[y][x]=INF;
}
}
}
if(b==0)
{
cout<<'0'<<endl;
}
else
{
while(b--)
{
cin>>m>>n>>p;
if(p<t[m][n])
{
t[m][n]=p;
t[n][m]=p;
}
}
Djsta(1);
cout<<l[a]<<endl;
}
}
return 0;
}