深度优先搜索(DFS)编码

时间:2015-10-10 16:19:34

标签: c++

#include<iostream>

void DFS(int);
int G[10][10], visited[10], n;

//G->Adjacency Matrix, n->no of vertices

void main()
{
int i,j;
cout<<"Enter vertices";
cin>>n
cout<<"Enter adjacency matrix";
for(i=0;i<n;i++)
    for(j=0;j<n;j++)
        cin>>G[j][i];

for(i=0;i<n;i++)
    visited[i]=0

DFS(0);

void DFS(int i)
{
int j;
cout<<"\n"<<i;
visited[i]=1;
for(j=0;j<n;j++)
    if(!visited[j] && G[i][j]==1)
            DFS(j);
}

if条件中的!访问[j]是什么意思?我知道一旦你访问任何节点,你必须使数组中的节点位为1,但我们如何对任何数组应用not条件?

2 个答案:

答案 0 :(得分:1)

这里访问[]像旗帜一样工作。我希望你理解算法是如何工作的(如果不是先尝试理解它)。你知道DFS总是与深度一致。那就是如果它得到3作为叶子2那么它将进入节点3并搜索3的叶子。所以考虑一个图表,其中节点1与2,2连接,3与3连接如果我们从节点1运行DFS,它将如下所示:1-> 2-> 3-> 1-> 2-> 3>依此类推,它们永远不会终止。为避免循环,我们将当前节点标记为已访问,并且仅访问之前未访问过的节点。

使用!visited [j]意味着之前没有访问过第j个节点。

答案 1 :(得分:0)

在深度优先搜索中,想法是在回溯之前尽可能地从邻居到邻居旅行。什么决定可能的深度是你必须跟随边缘,并且你不会访问任何顶点两次(!visit [j])