复试算法笔记-图的遍历

BFS

需要借助队列,反复取出队首节点,然后依次访问与队首节点相邻的且未加入队列的节点加入队列,直至队列为空 

邻接矩阵存储

int n , G[N][N];
bool vis[N] = {false};

void BFS(int u)
{
	queue<int> q;
	q.push(u);
	vis[u] = true;
	
	while(!q.empty())
	{
		int u = q.front();
		q.pop();
		
		for(int v = 0; v < n; v ++)
		{
			if(!vis[v] && G[u][v] != INF)
			{
				q.push(v);
				vis[v] = true;
			}
		}
	}
}

void BFSTraverse()
{
	for(int u = 0; u < n; u ++)
	{
		if(!vis[u]) BFS(u);
	}
}

邻接表存储

vector<int> Adj[N];
int n;
bool vis[N] = {false};

void BFS(int u)
{
	queue<int> q;
	q.push(u);
	vis[u] = true;
	
	for(int v = 0; v < Adj[u].size(); v ++)
	{
		if(!vis[v] && Adj[u][v] != INF)
		{
			q.push(v);
			vis[v] = true;
		}
	}
}

void BFSTraverse()
{
	for(int u = 0; u < n; u ++)
	{
		if(!vis[u]) BFS(u);
	}
}

DFS

从当前节点出发一直向下走,直到该路径不能前进后返回上一个岔路口并继续向下走

邻接矩阵存储

int n, G[N][N];
bool vis[N];

void DFS(int u. int depth)
{
	vis[u] = true;
	/*对u进行操作*/
	for(int v = 0; v < n; v ++)
	{
		if(!vis[v] && G[u][v] != INF)
		{
			DFS(v, depth + 1);
		}
	}
}

void DFSTraverse()
{
	for(int u = 0; u < n; u ++)
	{
		if(!vis[u]) DFS(u, 1);
	}
}

邻接表存储

int n;
vector<int> Adj[N];
bool vis[N] = {false};

void DFS(int u, int depth)
{
	vis[u] = true;
	/*对u进行访问操作*/
	for(int i = 0; i < Adj[u].size(); v ++)
	{
		int v = Adj[u][i];
		if(!vis[v]) DFS(v, depth + 1);
	}
}

void DFSTraverse()
{
	for(int u = 0; u < n; u ++)
	{
		if(!vis[u]) DFS(u, 1);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值