有向图的邻接矩阵表示法(创建,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);

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光光-Leo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值