emm......还是一个蓝白点的思想,也是看了别人的题解才知道用vecor数组来表示某点所连接的所有点,vector用的确实好。
#include<bits/stdc++.h>
using namespace std;
int w[109][109];
int dis[109];
vector <int> a[109];
bool vis[109];
int spfa(int s)
{
queue <int > Q;
Q.push(s);
vis[s]=1;
while(!Q.empty())
{
int p=Q.front();
Q.pop();
vis[p]=0;
for(int i=0;i<a[p].size();++i)
{
int q=a[p][i];
if(dis[q]>dis[p]+w[p][q])//这里wa了一次,以后还是尽量别用min,because有后续语句的情况下不好操作;
{
dis[q]=dis[p]+w[p][q];
if(!vis[q])
{
vis[q]=1;
Q.push(q);
}
}
}
}
return 0;
}
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m)&&n+m)
{
memset(a,0,sizeof(a));
memset(w,0x7f,sizeof(w));
memset(vis,0,sizeof(vis));
memset(dis,0x7f,sizeof(dis));
dis[1]=0;
for(int i=1;i<=n;++i)w[i][i]=0;
for(int i=1;i<=m;++i)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
w[x][y]=w[y][x]=z;
a[x].push_back(y);
a[y].push_back(x);
}
spfa(1);
printf("%d\n",dis[n]);
}
return 0;
}
The end;