csdn hud 2094 拓撲排序 已經AC

YX_blog發表於2015-08-12
package cn.hncu.acm;

import java.util.Scanner;

public class p2094 {
	static int degree[];//統計是否有人戰勝它
	//	static int src[][];
	static String name[];//儲存 放進去人名
	static int num;//把人名放進陣列之後需要人數統計,
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int n=sc.nextInt();
			if(n==0){
				break;
			}
			int x,y;
			int count=0;
			num=0;
			name=new String[2*n];
			degree=new int[2*n];

			
			for(int i=0;i<n;i++){//接受字串
				String a=sc.next();
				String b=sc.next();
				x=conver(a);//需要索引,但是字串不知道如何處理,所以轉換整數來做。
				y=conver(b);
				//				src[x][y]=1;//儲存路徑,但是在程式碼中用不到,所以去掉。
				degree[y]++;//用來記錄後一個的入度
			}

			for(int i=0;i<num;i++){
				if(degree[i]==0){
					count=count+1;//若是等於0;說明沒有人能戰勝,但是要是出現多個,就不能選出冠軍了
				}
			}
			if(count==1){
				System.out.println("Yes");
			}else{
				System.out.println("No");
			}
		}

	}
	private static int conver(String b) {//加進陣列之前,必須先看陣列裡面存在該字串沒有,判斷
		for(int i=0;i<num;i++){//要是沒有,直接加入,
			if(name[i].compareTo(b)==0){
				return i;//返回之前的分配的數值
			}
		}
		name[num++]=b;
		return num-1;
	}

}

點選開啟連結

相關文章