代码:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int mp[255][255];
int dist[255],s[255];
int n,m;
void dijkstra()
{
int dis,i,j,u;
//cout<<u<<endl;
// for(i=0;i<10;i++)
// cout<<s[i]<<endl;
// for(i=0;i<10;i++)
// for(j=0;j<10;j++)
// cout<<mp[i][j]<<endl;
for(i=1;i<=n;i++)
{
dist[i]=mp[1][i];
s[i]=0;
}
s[1]=1;
for(i=1;i<n;i++)
{
dis=INF;
for(j=1;j<=n;j++)
if(s[j]==0&&dist[j]<dis)
{
u=j;
dis=dist[j];
}
//cout<<u<<endl;
s[u]=1;///u一开始在这里成了一个随机数,因为TM我看着书抄代码都能抄错!
for(j=1;j<=n;j++)
{
if(s[j]==0)
if(mp[u][j]<INF&&dist[u]+mp[u][j]<dist[j])
dist[j]=dist[u]+mp[u][j];
}
}
cout<<dist[n]<<endl;
}
int main()
{
int i,a,b,c,j;
while(cin>>n>>m)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
mp[i][j]=0;
else
mp[i][j]=INF;
}
}
memset(s,0,sizeof(s));
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
if(mp[a][b]>c)
mp[a][b]=mp[b][a]=c;
}
// for(i=0;i<=n;i++)
// for(j=0;j<=n;j++)
// if(i==j)
// mp[i][j]=0;
dijkstra();
}
return 0;
}
基本上都是书上的东西,一开始不敢写,后来又写错了for循环的位置,后来又都是一些细节性的问题;要求的是从节点一到节点n的路径,所以一开始的时候在数组初始化的下标上出了一些问题...因为书上的代码数组下标是从零开始的。
最近状态不是很好,老想打游戏~