构造邻接矩阵,并用邻接矩阵解决有向图的连通性问题
2016-09-07 19:38
597 查看
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<Integer,ArrayList<Integer>> map=new HashMap();
int g1=in.nextInt();
int g2=in.nextInt();
int n=in.nextInt();
for(int i=0;i<n;i++){
int key=in.nextInt();
int value=in.nextInt();
if(map.containsKey(key)){
map.get(key).add(value);
}else {
ArrayList<Integer> list=new ArrayList<Integer>();
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<Integer, ArrayList<Integer>> map){
if(!map.containsKey(g1)){
flag=false;
}else {
ArrayList<Integer> list=map.get(g1);
for(int value:list){
if(value==g2){
flag=true;
return;
}else {
isConnectivity(value, g2, map);
}
}
}
}
}
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<Integer,ArrayList<Integer>> map=new HashMap();
int g1=in.nextInt();
int g2=in.nextInt();
int n=in.nextInt();
for(int i=0;i<n;i++){
int key=in.nextInt();
int value=in.nextInt();
if(map.containsKey(key)){
map.get(key).add(value);
}else {
ArrayList<Integer> list=new ArrayList<Integer>();
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<Integer, ArrayList<Integer>> map){
if(!map.containsKey(g1)){
flag=false;
}else {
ArrayList<Integer> list=map.get(g1);
for(int value:list){
if(value==g2){
flag=true;
return;
}else {
isConnectivity(value, g2, map);
}
}
}
}
}
相关文章推荐
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 基类的构造函数中获取用户的信息,比如Cookie、Session等,但Session在构造时却还不存在问题解决方案
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 拷贝构造和运算符重载(我解决的问题)
- 实现支付宝接口时url的构造,主要解决服务器不支持https的问题
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 一时技痒 不用模拟第一印象的构造 通过三个观察得来的规律解决N^2个往返接力问题
- 构造矩阵解决线性递推问题
- 解决Spring定时计划任务重复执行两次或多次(实例被构造两次)问题的方法
- 有效利用索引和SQL构造,成功解决性能问题的经验
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 每年15万美元!这是开发人员解决构造问题的总成本!
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- 实现支付宝接口时url的构造,主要解决服务器不支持https的问题
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 1.解决“不允许在查询中显式构造实体类型” 问题