无向图的基本实现,利用临接矩阵

本文介绍了一个使用Java实现的无向图基本结构,通过邻接矩阵来表示图的关系,并提供了深度优先遍历算法的实现。文章展示了如何创建图、添加节点和边,最后演示了深度优先遍历的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package tu;

import java.util.Stack;
/**无向图的基本实现
 * 利用临接矩阵*/
public class Graph {
	private int maxSize;
	private Node node[];//用来保存节点
	private int nitem;//节点个数
	private int[][] edge;//保存边
	private Stack<Integer> stack;//栈
	
	/**构造函数 初始化*/
	public Graph(int maxSize){
		this.maxSize=maxSize;
		node=new Node[maxSize];
		edge=new int[maxSize][maxSize];
		stack=new Stack<Integer>();
		nitem=0;
	}
	
	/**添加节点*/
	public void addNode(char lab){
		node[nitem++]=new Node(lab);
	}
	
	/**添加边*/
	public void addEdge(int start,int end){
		edge[start][end]=1;
		edge[end][start]=1;
	}
	
	/**
	 * 打印节点*/
	public void display(int v){
		System.out.print(node[v].label+" ");
		
	}
	
	/**深度优先遍历图*/
	public void dfs(){
		//从第一个节点开始遍历
		node[0].wasVisited=true;
		display(0);
		stack.push(0);
		while(!stack.empty()){
			int v=getUnvisited(stack.peek());
			if(v==-1){
				stack.pop();
			}else{
				node[v].wasVisited=true;
				display(v);
				stack.push(v);
			}
			
		}
		//还原标志位
		for(int i=0;i<nitem;i++){
			node[i].wasVisited=false;
		}
		
	}
	
	/**获取没被访问的临接点*/
	public int getUnvisited(int v){
		
		for(int i=0;i<nitem;i++){
			if(edge[v][i]==1&&node[i].wasVisited==false){
				return i;
			}
		}
		return -1;
		
	}
	
	public static void main(String[] args) {
		Graph p=new Graph(8);
		p.addNode('A');
		p.addNode('B');
		p.addNode('C');
		p.addNode('D');
		p.addNode('E');
		p.addNode('F');
		p.addNode('G');
		p.addNode('H');
		
		p.addEdge(0, 1);
		p.addEdge(0, 6);
		p.addEdge(0, 5);
		p.addEdge(1, 2);
		p.addEdge(6, 7);
		p.addEdge(5, 4);
		 
		p.addEdge(7, 3);
		 
		
		p.dfs();
	}
	
}
package tu;

public class Node {
	public char label;
	public boolean wasVisited;
	public Node(char label){
		this.label=label;
		wasVisited=false;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值