练习记录 06-图1 列出连通集 (25 分)


import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int N=in.nextInt();
		int S=in.nextInt();
		int i,j;
		int[][]list = new int[N][N];
		boolean[] v = new boolean[N];
		for(int k=1;k<=S;k++) {/*建立一维数组*/
			i=in.nextInt();
			j=in.nextInt();
			list[i][j]=1;
			list[j][i]=1;
		}
		Graph g = new Graph(N,v,list);
	}

}
class Graph {
	private Node head;
	private Node temp;
	private Node rear;
	
	class Node{
		protected int data;
		protected Node next;
		public Node() {
			
		}
		public Node(int i) {
			this.data=i;
		}
	}
	public Graph(int N,boolean[] v, int[][] list){
		Node n = new Node(N);
		head=n;
		listcomp(N,v,list);
		
	}
	public void enqueue(int i) {
		Node n = new Node(i);
		if(head.next==null) {
			head.next=n;
			rear=n;
		}
		else {
			rear.next=n;
			rear=n;
		}
		
		
	}
	public int dequeue() {
		temp=head.next;
		head.next=temp.next;
		temp.next=null;
		return temp.data;
	}
	public boolean IsEmpty() {
		if(head.next==null) {
			return true;
		}
		return false;
	}
	
	public void BFS(int i,boolean[] v,int[][] list) {
		v[i]=true;
		enqueue(i);
		while(!IsEmpty()) {
			i=dequeue();
			System.out.print(" "+i);
			for(int j=0;j<v.length;j++) {
				if(list[i][j]==1&&v[j]==false) {/*i与j节点有链接 且 该j点没有被visit过*/
					v[j]=true;
					enqueue(j);
				}
			}
		}
		
		
	}
	public void DFS(int i,boolean[] v,int[][] list) {
		v[i]=true;
		System.out.print(" "+i);
		for(int j=0;j<v.length;j++) {
			if(list[i][j]==1&&v[j]==false) {/*与j节点有链接 且 该点没有被visit过*/
				DFS(j,v,list);
			}
		}
	}
	public void listcomp(int N,boolean[] v,int[][] list){
		for(int i=0;i<N;i++) {
			if(!v[i]) {
				System.out.print("{");
				DFS(i,v,list);
				System.out.print(" }");
				System.out.println("");
			}
		}
		for(int i=0;i<N;i++) {/*reset v[]*/
			v[i]=false;
		}
		for(int i=0;i<N;i++) {
			if(!v[i]) {
				System.out.print("{");
				BFS(i,v,list);
				System.out.print(" }");
				System.out.println("");
			}
		}
	}

}

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int N=in.nextInt();
        int S=in.nextInt();
        int i,j;
        int[][]list = new int[N][N];
        boolean[] v = new boolean[N];
        for(int k=1;k<=S;k++) {/*建立一维数组*/
            i=in.nextInt();
            j=in.nextInt();
            list[i][j]=1;
            list[j][i]=1;
        }
        Graph g = new Graph(N,v,list);
    }

}
class Graph {
    private Node head;
    private Node temp;
    
    class Node{
        protected int data;
        protected Node next;
        public Node() {
            
        }
        public Node(int i) {
            this.data=i;
        }
    }
    public Graph(int N,boolean[] v, int[][] list){
        Node n = new Node(N);
        head=n;
        listcomp(N,v,list);
        
    }
    public void enqueue(int i) {
        Node n = new Node(i);
        if(head!=null) {
            temp=head.next;
        }
        head.next=n;
        n.next=temp;
        
        
    }
    public int dequeue() {
        temp=head.next;
        head.next=temp.next;
        temp.next=null;
        return temp.data;
    }
    public boolean IsEmpty() {
        if(head.next==null) {
            return true;
        }
        return false;
    }
    
    public void BFS(int i,boolean[] v,int[][] list) {
        v[i]=true;
        System.out.print(" "+i);
        enqueue(i);
        while(!IsEmpty()) {
            i=dequeue();
            for(int j=0;j<v.length;j++) {
                if(list[i][j]==1&&v[j]==false) {/*i与j节点有链接 且 该j点没有被visit过*/
                    v[j]=true;
                    System.out.print(" "+j);
                    enqueue(j);
                }
            }
        }
        
        
    }
    public void DFS(int i,boolean[] v,int[][] list) {
        v[i]=true;
        System.out.print(" "+i);
        for(int j=0;j<v.length;j++) {
            if(list[i][j]==1&&v[j]==false) {/*与j节点有链接 且 该点没有被visit过*/
                DFS(j,v,list);
            }
        }
    }
    public void listcomp(int N,boolean[] v,int[][] list){
        for(int i=0;i<N;i++) {
            if(!v[i]) {
                System.out.print("{");
                DFS(i,v,list);
                System.out.print(" }");
                System.out.println("");
            }
        }
        for(int i=0;i<N;i++) {/*reset v[]*/
            v[i]=false;
        }
        for(int i=0;i<N;i++) {
            if(!v[i]) {
                System.out.print("{");
                BFS(i,v,list);
                System.out.print(" }");
                System.out.println("");
            }
        }
    }

}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值