有向图的邻接矩阵表示法(创建,DFS,BFS)

package shiyan;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class GraphMartix {
    
	class Vertext<AnyType>{
		char data;
		boolean visit;
		public Vertext(char d){
			this.data=d;
			this.visit=false;
		}
	}
	
	Vertext ver[];
	int arcs[][];
	int verNumble;
	//创建图
	Scanner sc=new Scanner(System.in);

	public void creatGraph(){
		System.out.println("请输入顶点个数");
		verNumble=sc.nextInt();
		ver=new Vertext[verNumble];
		arcs=new int[verNumble][verNumble];
		for(int i=0;i<verNumble;i++){
			for(int j=0;j<verNumble;j++){
				arcs[i][j]=0;
			}
		}
		System.out.println("请输入顶点数据");
		String point=sc.next();
		char p[]=point.toCharArray();
		for(int i=0;i<p.length;i++){
			ver[i]=new Vertext(p[i]);
		}
		for(int i=0;i<verNumble;i++){
			System.out.println("请输入 所有的以"+ver[i].data+"为弧尾的边上的另一端点顶点");
			String apoint=sc.next();
			char ap[]=apoint.toCharArray();
			int ap_id[]=new int[ap.length];   //存放邻接点下标
			if(ap[0]=='*')
				ap_id[0]=-1;
			else{
			    for(int x=0;x<ap.length;x++){
				   int y=0;
				   while(ver[y].data!=ap[x]&&y<ver.length){
					  y++;
				   }
				   ap_id[x]=y;	
			    }
			}
			if(ap_id[0]==-1)
				continue;
			for(int j=0;j<ap_id.length;j++){
				arcs[i][ap_id[j]]=1;
			}
		}
	}

	public void DFS(int v){
		ver[v].visit=true;
		System.out.println(ver[v].data);
		for(int i=0;i<ver.length;i++){
			if(arcs[v][i]==1&&ver[i].visit==false)
				DFS(i);
		}
	}
	public void BFS(int v){
		Queue<Integer> q=new LinkedList<Integer>();
		q.add(v);
		while(!q.isEmpty()){
			v=q.poll();
			if(ver[v].visit==false){
				ver[v].visit=true;
				System.out.println(ver[v].data);
			}
			for(int i=0;i<ver.length;i++){
				if(arcs[v][i]==1&&ver[i].visit==false){
					q.add(i);
				}
			}
		}
	}
	public void du(){
		int chu=0;
		int ru=0;
		for(int i=0;i<ver.length;i++){
			for(int j=0;j<ver.length;j++){
				if(arcs[i][j]==1)
					chu++;
				if(arcs[j][i]==1)
					ru++;
			}
			
			System.out.println(ver[i].data+"的度为: "+(chu+ru));
			chu=0;
			ru=0;
		}
	}
	
	public static void main(String[] args) {
	     GraphMartix gm=new GraphMartix();
	     gm.creatGraph();
	     gm.du();
	   //  gm.DFS(0);
	     gm.BFS(0);

	}

}

posted @ 2013-12-14 10:58  IT专业户  阅读(239)  评论(0编辑  收藏  举报