spaf算法解題
#include<iostream>
#include<queue>
using namespace std;
int g[101][101]={0};
bool is[101] ;
int dis[101];
void spaf(int n,int w)
{
queue<int> queue;
queue.push(w);
memset(is,false,sizeof(is));
memset(dis,-1,sizeof(dis));
dis[w] = 0;
is[w] = true;
while(!queue.empty())
{
int x = queue.front();
is[x] = false;
queue.pop();
for(int i =1;i<=n;i++)
{
if(g[x][i] != -1)
{
if(dis[i] == -1 || dis[x] + g[x][i] < dis[i])
{
dis[i] = dis[x] + g[x][i];
if(is[i] == false)
{
is[i] = true;
queue.push(i);
}
}
}
}
}
}
int main()
{
int n,m,a,b,c;
while(1)
{
memset(g,-1,sizeof(g));
scanf("%d %d",&n,&m);
if(n == 0 && m == 0)
{
break;
}
for(int i = 1;i<=n;i++)
{
g[i][i] = 0;
}
for(int i =0;i<m;i++)
{
scanf("%d %d %d",&a,&b,&c);
g[a][b] = c;
g[b][a] = c;
}
spaf(n,1);
printf("%d\n",dis[n]);
}
return 0;
}