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

  • 相关阅读:
    负载均衡算法(四)IP Hash负载均衡算法
    负载均衡算法(二)加权轮询负载均衡算法
    负载均衡算法(一)轮询负载均衡算法
    移动端媒体查询CSS3适配规则
    JavaScript中label语句的使用
    NODE简易综合应用服务器搭建
    ES6--不定参数
    ES6--默认参数表达式,参数变动
    node基础学习——http基础知识-02-http响应数据流
    node基础学习——http基础知识-01-客户单请求
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752296.html
Copyright © 2020-2023  润新知