hdu2544-最短路径spaf

来源:互联网 发布:mysql数据库锁表原因 编辑:程序博客网 时间:2024/05/24 07:20

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;}