用c++写一个深度搜索代码
时间: 2023-05-18 16:03:58 浏览: 51
好的,以下是一个简单的深度优先搜索的代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_N 100 // 最大节点数
int n; // 节点数
int graph[MAX_N][MAX_N]; // 图的邻接矩阵
bool visited[MAX_N]; // 标记节点是否已访问
void dfs(int u) {
visited[u] = true; // 标记节点已访问
printf("%d ", u); // 输出节点编号
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v]) { // 如果节点 u 和节点 v 有连边且节点 v 未访问
dfs(v); // 递归访问节点 v
}
}
}
int main() {
scanf("%d", &n); // 输入节点数
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]); // 输入邻接矩阵
}
}
dfs(0); // 从节点 0 开始深度优先搜索
return 0;
}
```
希望这个代码示例能够帮到你。
相关问题
用c++20写一个深度搜索算法
好的,以下是一个简单的深度搜索算法的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100 // 最大节点数
int n; // 节点数
int g[MAX_N][MAX_N]; // 图的邻接矩阵
int visited[MAX_N]; // 标记节点是否被访问过
void dfs(int u) {
visited[u] = 1; // 标记节点u已经被访问过
printf("%d ", u); // 输出节点u的编号
for (int v = 0; v < n; v++) {
if (g[u][v] && !visited[v]) { // 如果节点v与节点u相邻且节点v未被访问过
dfs(v); // 递归访问节点v
}
}
}
int main() {
scanf("%d", &n); // 输入节点数
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &g[i][j]); // 输入邻接矩阵
}
}
for (int i = 0; i < n; i++) {
if (!visited[i]) { // 如果节点i未被访问过
dfs(i); // 从节点i开始深度优先搜索
}
}
return 0;
}
```
这个算法可以用来遍历一个连通图中的所有节点。它从一个起始节点开始,递归地访问与它相邻的未被访问过的节点,直到所有节点都被访问过为止。
写一个c++的深度搜索的代码
当然,我会尽力回答您的问题。以下是一个简单的深度优先搜索的C语言代码示例:
```c
#include <stdio.h>
// 定义常量
#define MAX_N 100
int n; // 顶点数
int m[MAX_N][MAX_N]; // 邻接矩阵
int visited[MAX_N]; // 标记是否已经访问
// 深度优先搜索算法
void dfs(int x)
{
int i;
visited[x] = 1; // 标记当前顶点已经访问
printf("%d ", x); // 输出当前顶点的编号
for (i = 0; i < n; i++)
{
if (m[x][i] && !visited[i]) // 如果当前顶点和顶点i之间有边且顶点i未被访问
{
dfs(i); // 递归访问顶点i
}
}
}
int main()
{
// 读入图的顶点数和邻接矩阵
scanf("%d", &n);
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &m[i][j]);
}
}
// 对每个连通分量分别进行深度优先搜索
for (i = 0; i < n; i++)
{
if (!visited[i])
{
dfs(i);
}
}
return 0;
}
```
这段代码实现了基本的深度优先搜索算法,可以通过邻接矩阵表示图的关系,输出每个连通分量的遍历序列。当然,根据具体的应用场景可以对算法进行更进一步的优化,例如使用邻接表代替邻接矩阵,以降低空间复杂度等。