关闭

POJ1603

标签: pojc语言
177人阅读 评论(0) 收藏 举报
分类:

Problem: Risk
Description: 给你一个无向图,然后问你从某些srcdes最少要经过多少个点。
Solution: Floyd算法,如果两个点时连接的,就把他们之间的路劲长度设为1。跑一下floyd算法就好了。
Code(C++):

#include <stdio.h>
#include <string.h>

#define MIN(a,b) ((a)<(b)? (a):(b))

const int M=20;

const int INF=0x3f3f3f;

int dp[M+1][M+1];

void flyod()
{
    for(int k=1;k<=M;k++)
        for(int i=1;i<=M;i++)
            for(int j=1;j<=M;j++)
                dp[i][j]=MIN(dp[i][k]+dp[k][j],dp[i][j]);
}

int main()
{
    int sum;
    int K=1;
    while(~scanf("%d",&sum)){
        for(int i=0;i<M+1;i++){
            for(int j=0;j<M+1;j++)
                dp[i][j]=INF;
            dp[i][i]=0;
        }
        int to;
        for(int i=0;i<sum;i++)
            scanf("%d",&to),
            dp[1][to]=dp[to][1]=1;
        for(int from=2;from<=M-1;from++){
            scanf("%d",&sum);
            for(int i=0;i<sum;i++)
                scanf("%d",&to),
                dp[from][to]=dp[to][from]=1;
        }
        flyod();
        int m;
        scanf("%d",&m);
        int x,y;
        printf("Test Set #%d\n",K++);
        while(m--){
            scanf("%d%d",&x,&y);
            printf("%d to %d: %d\n",x,y,dp[x][y]);
        }
        puts("");
    }
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:48016次
    • 积分:2335
    • 等级:
    • 排名:第17666名
    • 原创:192篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    博客专栏
    文章分类
    最新评论