DFS 递归
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
using namespace std;
#define N 5
int mat[N][N] = {
{ 0, 1, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 1, 1, 0, 0, 1 },
{ 0, 0, 1, 0, 0 }
};
int visited[5]={0};
void DFS(int start) {
visited[start]= 1;
cout<< "visit: "<< start<< endl;
for (int i= 0; i< N; i++) {
if (!visited[i]&& mat[start][i]== 1) {
DFS(i);
}
}
}
int main() {
cout<< mat[0][1]<< endl;
for (int i= 0; i< N; i++) {
if (!visited[i]) {
cout<< "DFS:"<< endl;
DFS(i);
cout<< endl;
}
}
return 0;
}
DFS 非递归
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<iostream>
using namespace std;
#define N 5
int mat[N][N] = {
{ 0, 1, 1, 0, 0 },
{ 0, 0, 1, 1, 1 },
{ 0, 0, 0, 1, 0 },
{ 0, 1, 0, 0, 0 },
{ 0, 1, 0, 0, 0 }
};
int visited[5]={0};
int main() {
stack<int> sta;
vector<int> vec;
int len=0;
for (int i= 0; i< N; i++) {
if (!visited[i]) {
sta.push(i);
while(!sta.empty()){
//出栈,如果没有打印过,就加入向量中,打印过就跳过
int start=sta.top();
sta.pop();
cout<<"pop : "<<start<<endl;
if(visited[start]==0){
vec.push_back(start);
visited[start]=1;
len++;
for(int j=0;j<N;j++){
if(!visited[j]&&mat[start][j]){
sta.push(j);
cout<<"push: "<<j<<endl;
}
}
}
}
}
}
for(int i=0;i<len-1;i++) cout<<vec[i]<<' ';
cout<<vec[len-1];
return 0;
}
BFS 非递归
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#define N 5
using namespace std;
int mat[N][N] = {
{ 0, 1, 1, 0, 0 },
{ 0, 0, 1, 1, 0 },
{ 0, 1, 1, 1, 0 },
{ 1, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 0 }
};
int visited[N]={0};
void BFS(int start) {
visited[start]= true;
cout<< "start: "<< start<< endl;
queue<int> q;
q.push(start);
while (!q.empty()) {
int front= q.front();
q.pop();
for (int i= 0; i< N; i++) {
if (!visited[i]&& mat[front][i]== 1) {
cout<< "visit: "<< i<< endl;
visited[i]= 1;
q.push(i);
}
}
}
}
int main() {
for (int i= 0; i< N; i++) {
if (!visited[i]) {
cout<< "BFS:"<< endl;
BFS(i);
cout<< endl;
}
}
return 0;
}