构造邻接矩阵,并用邻接矩阵解决有向图的连通性问题

1.DigraphConnectivity

import java.util.ArrayList;

import java.util.HashMap;
import java.util.Scanner;


/*
 * 构造邻接矩阵,并用邻接矩阵解决有向图的连通性问题
 * 问题描述:给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,
 * 第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。最后给定之前的比较次数n。
 * 请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0。输入数据保证合法,不会有矛盾情况出现。
 * 
 * 测试用例:2,3,[[1,2],[2,4],[1,3],[4,3]],4
 * 返回: 1
 */
public class DigraphConnectivity {
private boolean flag=false;
public static void main(String[] args) {
DigraphConnectivity di=new DigraphConnectivity();
di.scanner();
}

public void scanner(){
Scanner in=new Scanner(System.in);
while(in.hasNextInt()){
HashMap> map=new HashMap();
int g1=in.nextInt();
int g2=in.nextInt();
int n=in.nextInt();
for(int i=0;i int key=in.nextInt();
int value=in.nextInt();
if(map.containsKey(key)){
map.get(key).add(value);
}else {
ArrayList list=new ArrayList();
list.add(value);
map.put(key, list);
}
}
isConnectivity(g1, g2, map);
if(flag){
System.out.println(1);
}
isConnectivity(g2, g1, map);
if(flag){
System.out.println(-1);
}
System.out.println(0);
}
}

//用邻接矩阵构建有向图的过程
public void isConnectivity(int g1,int g2,HashMap> map){
if(!map.containsKey(g1)){
flag=false;
}else {
ArrayList list=map.get(g1);
for(int value:list){
if(value==g2){
flag=true;
return;
}else {
isConnectivity(value, g2, map);
}
}
}
}
}

你可能感兴趣的:(构造邻接矩阵,并用邻接矩阵解决有向图的连通性问题)