怎么编程序深度优先输入

时间:2025-01-26 18:12:42 网络游戏

深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

```cpp

include

include

using namespace std;

define MAX_VERTEX_NUM 10

struct Node {

int adjvex; // 邻接顶点

Node *next; // 指向下一个节点的指针

int info; // 节点信息

};

typedef struct VNode {

char data; // 节点数据

Node *first; // 指向第一个邻接节点的指针

} VNode, AdjList[MAX_VERTEX_NUM];

struct Graph {

AdjList vertices; // 邻接表表示图

int vexnum, arcnum; // 顶点数和弧数

};

int visited[MAX_VERTEX_NUM]; // 记录节点是否被访问过

int locateVex(Graph G, char u) {

int i;

for (i = 0; i < G.vexnum; i++) {

if (u == G.vertices[i].data) return i;

}

if (i == G.vexnum) {

printf("Error u!\n");

exit(1);

}

return 0;

}

void createGraph(Graph &G) {

int i, j, k, w;

char v1, v2, enter;

Node *p;

printf("Enter the number of vertices: ");

cin >> G.vexnum;

printf("Enter the number of arcs: ");

cin >> G.arcnum;

printf("Enter the arcs (format: vertex1 vertex2 weight):\n");

for (i = 0; i < G.arcnum; i++) {

cin >> v1 >> v2 >> w;

p = &G.vertices[locateVex(G, v1)];

p->first = &G.vertices[locateVex(G, v2)];

p->next = p->first->next;

p->first->next = p;

p = &G.vertices[locateVex(G, v2)];

p->first = &G.vertices[locateVex(G, v1)];

p->next = p->first->next;

p->first->next = p;

}

}

void DFS(Graph &G, char a) {

int i;

visited[locateVex(G, a)] = 1;

cout<< a << " ";

Node *p = G.vertices[locateVex(G, a)].first;

while (p != NULL) {

if (!visited[locateVex(G, p->data)]) {

DFS(G, p->data);

}

p = p->next;

}

}

void display_graph(Graph &G) {

int i;

for (i = 0; i < G.vexnum; i++) {

if (!visited[i]) {

cout<< i << " ";

DFS(G, i);

cout << endl;

}

}

}

int main() {

Graph G;

createGraph(G);

display_graph(G);

return 0;

}

```

在这个程序中,我们首先定义了一个图的数据结构,包括节点和图的表示。然后,我们通过用户输入来构建图,并使用深度优先搜索算法来遍历和显示这个图。

要运行这个程序,你需要有一个C++编译器。将上述代码保存到一个文件中,例如`dfs_graph.cpp`,然后使用编译器编译并运行它。程序会提示你输入顶点数和弧数,然后输入每条弧的格式为`vertex1 vertex2 weight`。最后,程序会显示构建的图。

请注意,这个程序是一个简单的示例,实际应用中可能需要根据具体需求进行调整和扩展。