HDU 3631Shortest Path(flody变形)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3631

这题不难,简单的flody算法性质的小应用。话说这题竟然因为PE而错了两次。。竟然不知道PE怎么解决而找的题解。。。。。尴尬

代码如下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>
using namespace std;
int mp[400][400], vis[400], maxint=100000000;
int main()
{
    int n, m, q, x, a, b, c, i, j, k, num=0;
    while(scanf("%d%d%d",&n,&m,&q)!=EOF&&(n||m||q))
    {
        num++;
        if(num>1)
            printf("\n");
        printf("Case %d:\n",num);
        memset(vis,0,sizeof(vis));
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                if(i==j)
                    mp[i][j]=mp[j][i]=0;
                else
                    mp[i][j]=maxint;
            }
        }
        while(m--)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(mp[a][b]>c)
                mp[a][b]=c;
        }
        while(q--)
        {
            scanf("%d",&x);
            if(x)
            {
                scanf("%d%d",&a,&b);
                if(vis[a]==0||vis[b]==0)
                {
                    printf("ERROR! At path %d to %d\n",a,b);
                }
                else
                {
                    if(mp[a][b]<maxint)
                        printf("%d\n",mp[a][b]);
                    else
                        printf("No such path\n");
                }
            }
            else
            {
                scanf("%d",&a);
                if(vis[a])
                    printf("ERROR! At point %d\n",a);
                else
                {
                    vis[a]=1;
                    for(i=0; i<n; i++)
                    {
                        for(j=0; j<n; j++)
                        {
                            if(mp[i][j]>mp[i][a]+mp[a][j])
                                mp[i][j]=mp[i][a]+mp[a][j];
                        }
                    }
                }
            }
        }
    }
    return 0;
}


你可能感兴趣的:(编程,算法,C语言)