1.程序是使用邻接矩阵来表示图的,因为图中顶点的致密性,矩阵为1表示两个顶点连接上了。
2. dfs_visited[c] = 1 dfs_visited[c] = 1 表示访问过了
3. 利用二维数组的一行为1的元素节点即该元素的邻接点。
4. 执行dfs函数,是dfs(i)而不是dfs[i].
5. 按照递增顺序深度查找,但程序中如何体现堆栈的作用,难道不是顺序输出的嘛?
6. bfs:每次队列不空的时候,均应该取出一个节点 并将他的邻接节点压入队列。
7. 仅输出路径,不是按序输出
代码如下:
#include <iostream>
#include <queue>
using namespace std;
const int maxsize = 10;
int n,e,dfs_visited[maxsize],bfs_visited[maxsize],a[maxsize][maxsize];
queue<int> q;
void dfs(int c){
dfs_visited[c] = 1;
cout<<" "<<c;
for(int i=0;i<n;i++){
if(a[c][i] && !dfs_visited[i])
dfs(i);
}
}
void bfs(int c){
bfs_visited[c] = 1;
q.push(c);
cout<<" "<<c;
while(!q.empty()){
int temp = q.front();
q.pop();
for(int i=0;i<n;i++){
if(a[temp][i] && !bfs_visited[i]){
cout<<" "<<i;
q.push(i);
bfs_visited[i]=1;
}
}
}
}
int main()
{
int temp1,temp2;
cin>>n>>e;
for(int i=0;i<e;i++){
cin>>temp1>>temp2;
a[temp1][temp2] = 1;
a[temp2][temp1] = 1;
}
for(int i=0;i<n;i++){
if(!dfs_visited[i]){
cout<<'{';
dfs(i);
cout<<" }"<<endl;
}
}
for(int i=0;i<n;i++){
if(!bfs_visited[i]){
cout<<'{';
bfs(i);
cout<<" }"<<endl;
}
}
return 0;
}