京东第一题(暴力解法)

先建立邻接矩阵,然后矩阵每一行当作一个key放map里,value是Set,存行号 同一个集合的元素,这个元素标识的每一行肯定是相同的(可以自己画图看看) 之后遍历每一个key,遍历到key中为1的位置,查看对应Set中是否存在这个元素,若存在则错误。然后遍历另外的key和set,对于其他set的每一个元素,当前key对应下标是必须为1的。

public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int time = in.nextInt();
int index = 0;
while(index++ < time){
int N = in.nextInt();
int M = in.nextInt();
int mIndex = 0;
int[][] arr = new int[N][N];
while(mIndex < M){
int i = in.nextInt();
int j = in.nextInt();
arr[i-1][j-1] = 1;
arr[j-1][i-1] = 1;
mIndex++;
}
Map<String,Set<Integer>> map = new HashMap<String,Set<Integer>>();
for(int i = 0; i < N; i++){
StringBuilder str = new StringBuilder();
for(int j = 0; j < N; j++){
str.append(arr[i][j]);
}
if(!map.containsKey(str.toString())){
Set<Integer> set = new HashSet<Integer>();
set.add(i);
map.put(str.toString(), set);
}else{
Set<Integer> set = map.get(str.toString());
set.add(i);
}
}
boolean b = true;
for(Map.Entry<String, Set<Integer>> entry : map.entrySet()){
String key = entry.getKey();
Set<Integer> set = entry.getValue();
for(int i = 0; i < N; i++){
if(key.charAt(i) == '1'){
if(set.contains(i)){
b = false;
break;
}
}
}
if(!b){
break;
}
for(Map.Entry<String, Set<Integer>> otherEntry : map.entrySet()){
String otherKey = otherEntry.getKey();
if(key != otherKey){
Set<Integer> otherSet = otherEntry.getValue();
for(int otherNum : otherSet){
if(key.charAt(otherNum) == '0'){
b = false;
break;
}
}
}
if(!b)
break;
}
}
if(b)
System.out.println("Yes");
else
System.out.println("No");
}
}

}

#笔试题目##京东#
全部评论
大哥 你的答案真好看
点赞 回复
分享
发布于 2018-09-09 21:36

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务