大二(上) 数据结构 深度和宽度遍历图,邻接表存储

//深度和宽度遍历图,邻接表存储 
#include<iostream>
#include<queue>
#include<stdlib.h> 
#include<string.h>
#define maxn 10010
using namespace std;
int visited[maxn];
typedef struct Enode {
	int adjVex;     //任意与u相邻的点
	int w;          //边权
	struct Enode *nextArc;  //指向下一个边结点 
}Enode;
typedef struct {
	int n, e;
	Enode **a;
}Lgraph;

//单一顶点深搜 
void dfs(int v, int visited[], Lgraph g) {
	Enode *w;
	cout << v << " ";  //访问结点v
	visited[v] = 1;
	for (w = g.a[v]; w; w = w->nextArc)   //访问邻接点
	{
		if (!visited[w->adjVex]) {
			dfs(w->adjVex, visited, g);
		}
	}
}

//初始化 
int init(Lgraph *lg, int nSize) {
	lg->n = nSize;
	lg->e = 0;
	lg->a = (Enode **)malloc(nSize * sizeof(Enode *));
	if (!lg->a) return 0;
	for (int i = 0; i < lg->n; i++) {
		lg->a[i] = NULL;
	}
	return 1;
}

//插入边
int Insert(Lgraph *lg, int u, int v, int w) {
	if (u<0 || v<0 || u>lg->n - 1 || v>lg->n - 1 || u == v) return 0;
	Enode *p;
	p = (Enode *)malloc(sizeof(Enode));
	p->adjVex = v;
	p->w = w;
	p->nextArc = lg->a[u];
	lg->a[u] = p;
	lg->e++;
	return 1;
}

//全图深搜
void dfsGraph(Lgraph g) {
	int i;
	int *visited = (int *)malloc(g.n * sizeof(int));
	for (int i = 0; i < g.n; i++)
		visited[i] = 0;
	for (int i = 0; i < g.n; i++) {
		if (!visited[i]) {
			dfs(i, visited, g);
		}
	}
	free(visited);
}

int main() {
	Lgraph lg;
	int n, u, v, w, visited[maxn], p;
	memset(visited, 0, sizeof(visited));

	cout << "请输入顶点的个数." << endl;
	cin >> n;

	init(&lg, n);
	cout << "请输入带插入边的两个端点和边权.(以0 0 0结尾)" << endl;
	while (cin >> u >> v >> w) {
		if (u == 0 && v == 0 && w == 0) break;
		Insert(&lg, u, v, w);
	}

	cout << "请输入搜索的起点." << endl;
	cin >> u;
	
	//单一顶点深搜 
	cout << "单一顶点深搜:";
	dfs(u, visited, lg);
	cout << endl;

	//全图深搜 
	cout << "全图深搜:";
	dfsGraph(lg);
	cout << endl;
	cout << "深搜结束" << endl;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值