#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条件?
答案 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])