2016 360笔试题------找镇长

public class Main {

public static void main(String[] args) {

int count, n ,m;
int relation [][];
int x, y;
int result;

Scanner s = new Scanner(System.in);
int number = s.nextInt();  //保存数据的组数
while(number-- > 0){

count = 0;  //记录是不是一组数据,除掉开头的第一行
n = s.nextInt();
m = s.nextInt();
relation = new int [n][n];    //创建一个二维的关系数组,排序从0开始的
for(int i=0; i<n; i++)              //初始化数组
relation[i][i] = 1;      //自己认识自己

while(count < m){//这是一组数据
count++;
x = s.nextInt();
y = s.nextInt();
relation[x-1][y-1] = 1;     //此关系成立 ----->表示x认识y
}
result = judge(relation);          //找出镇长的合适人选
if(result == 0)
System.out.println(0);
else{
System.out.println(1);
System.out.print(result);
}
System.out.println();
}
s.close();
}


private static int judge(int[][] relation) {
   
for(int i=0; i<relation.length; i++){
boolean flag = true;   //标记是否所有人都认识他
for(int j=0; j<relation.length; j++){
if(relation[j][i] == 1){     //j认识i

}else{
flag = false;
break;
}
}
if(flag){ //所有人都认识i,那么要判断是否i认识除自己外的其他人
for(int k=0; k<relation.length; k++)
if(i!=k && relation[i][k]==1){  //认识了其他人
flag = false;
break;
}
}
if(flag){//满足条件,而且满足这样条件的只有一个人
return i+1;
}

}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值