图的遍历

一:深度优先遍历

	深度优先遍历是从图的某个顶点出发,访问此顶点,并依次从该节点的未被访问的邻接点出发深度优先遍历该图;
	简言之就是从某一结点V出发,一条路走到底遍历V的邻接点,直到访问不了剩下的结点再回到最开始的V后面接着往下走
	深度优先遍历邻接表储存的图:
public void DFS(ALGraph G,int i){
		//以顶点i出发,对邻接表储存的图G进行DFS搜索
		Visit(G.List[i].vertex);//访问该结点
		G.List[i].isReaded=true;//设置该结点被访问过
		ENode pENode=G.List[i].next;//新建一个临时结点指向头结点的下一个子结点
		while (pENode != null) {//当临时结点不为空的时候
			int j=pENode.adjvex;//新建一变量指向临时结点指向邻接表头指针的下标
			if (G.List[j].isReaded!=true) {//如果下标指向的结点未被访问过
				DFS(G,j);//对该结点进行深度遍历
			}
			pENode=pENode.next;//临时结点指向下一个结点
		}
		
		
	}
	public void Visit(char v){
		System.out.println(v+" ");//简单遍历输出该结点的值
	}

二:广度优先遍历

	广度优先遍历就是从图的某个顶点V出发,在访问了V之后,依次访问V的各个未被访问过的邻接点,然后按访问的顺序,再分别从这些邻接点出发依次访问它们的邻接点。按照一层一层的来遍历;
	代码实现广度优先遍历邻接矩阵存储的图:
public void BFS(Graph g,int i){
		//广度优先遍历要依靠队列来实现
		int Q[]=new int[100];//定义队列
		int front=0,rear=-1;//定义头尾指针
		Visit(g.vexs[i]);//访问i结点
		g.isReaded[i]=true;//设置该结点被访问过
		rear++;
		Q[rear]=i;//把i入队列
		while(front<=rear){
			i=Q[front];
			front++;//出队列
			for (int j = 0; j < g.Vnum; j++) {
				if(g.edges[i][j]==1&&g.isReaded[j]==false){//如果结点i、j之间有边且未被访问过
					Visit(g.vexs[j]);//访问结点j
					g.isReaded[j]=true;//设置结点j被访问过
					rear++;
					Q[rear]=j;//结点j入队列
				}
			}
		}
	}
	public void BFST(Graph g){
		for (int i = 0; i < g.Vnum; i++) {
			if (g.isReaded[i]==false) {
				BFS(g, i);
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值