zoj 1221 Risk Flory

  博客开了快半年了- -学习编程也快1年半了,觉得空空的不太好看,刚好最近开始练习ACM了,就来做一个简单的ACM学习笔记吧,纪念的第一题zol 1221 Risk 风险游戏(个人觉得是这样翻- -翻译错了的话,别打脸就行)。

  题目简述,一个20个国家,玩家每次只能从攻击相邻的国家,计算I国家攻击J国家最少要攻击的国家数(渣翻莫怪)。

  输入: 前19行为地图设定,每行第一个数字为第I个国家相邻的国家数(该数目只往前数不后数),后面的n个数字为国家编号,然后是需要计算的次数N,之后就是N行2个数字的需计算国家编号。

  输出:相信输出直接看题就可以了- -我就不翻了。注意一点。。该游戏是可以无限循环的,输出的第一行“Test Set #T“ T是不断增加的,还有就是每一次游戏结束都要空一行才能进行下一场游戏(因为这坑爹的原因我PE了10多次啊(ノ=Д=)ノ┻━┻)。不说了贴代码。

import java.util.*;
public class Main {
    public static void main(String arg[]){
        Scanner scan = new Scanner(System.in);
        int[][] country = new int[20][20];
        int T= 1;
        while(scan.hasNext()){
            SetMap(country,scan);
            Floyd(country);
            int rtime=scan.nextInt();
            System.out.println("Test Set #"+T++);
            while(rtime-->0){
                int Fc=scan.nextInt();
                int Sc=scan.nextInt();
                System.out.println(Fc+" to "+Sc+": "+country[Fc-1][Sc-1]);
            }
            System.out.print("\n");
        }
    }
    public static void SetMap(int country[][],Scanner scan){
        for(int i=0;i<20;i++){
            for(int j=0;j<country[i].length;j++){
                /*country[i][j]=Integer.MAX_VALUE;*/
                country[i][j]=32767;
            }
        }
        for(int i=0;i<19;i++){
            int sob=scan.nextInt(); //borders counrty counts
            for(int j=sob;j>0;j--){
                int any=scan.nextInt();
                country[i][any-1]=1;
                country[any-1][i]=1;
            }
        }
    }
    public static void Floyd(int [][]d){
        int k,l,m,o;
        for(k=0;k<20;k++){
            for(l=0;l<20;l++){
                for(m=0;m<20;m++){
                    if(l!=m){
                        if(d[l][m]>(d[l][k]+d[k][m])){
                            d[l][m]=d[l][k]+d[k][m];
                            d[m][l]=d[l][m];
                        }
                    }else{
                        d[l][m]=d[m][l]=0;
                    }
                }
            }
        }
    }
}

代码有误的或有更好的写法请指出,菜鸟的我会认真改过的(→_←),感谢阅读。

 

转载于:https://www.cnblogs.com/kfoworld/p/4097936.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值