#include<iostream>
using namespace std;
#define N 10
//the structure of Gragh
// only using the top triangle
int Graph[N][N] = {0}; //Compile will make all the space in 0
int visit[N+1] = {0};
int Ne, Nv;
void clearVisit();
void myread();
void print(int arr[], int len);
void BFS(int v, int arr[], int &seq);
void DFS(int v, int arr[], int &sequence); // sequeence pointer the last element in array
int main(){
int arr[N+1] = {0}, seq=-1;
scanf(" %d %d", &Nv, &Ne);
myread();
int i;
for(i=0; i<Nv; i++){
if( !visit[i] ){
seq = -1;
DFS(i, arr, seq);
//output
print(arr, seq+1);
}
}
for(i=0; i<Nv; i++){
visit[i] = 0;
}
for(i=0; i<Nv; i++){
if( !visit[i] ){
seq = -1;
BFS(i, arr, seq);
//output
print(arr, seq+1);
}
}
return 0;
}
void myread(){
int i;
for(i=0; i<Ne; i++){
int v1, v2;
scanf(" %d %d", &v1, &v2);
Graph[v1][v2] = Graph[v2][v1] = 1;
}
}
/**
* guarateen that v be not visited
*/
void BFS(int v, int arr[], int& seq){
int queue[N+1] = {0};
int head=0, tail=-1; //Simulate the queue
queue[++tail] = v;
visit[v] = 1;
while( head<= tail){
int w, j;
w = queue[head++]; //Dequeue
arr[++seq] = w; // write to array
for(j=0; j<Nv; j++){
if( !visit[j] && Graph[w][j]){
queue[++tail] = j;
visit[j] = 1;
}
}
}
}
void DFS(int v, int arr[], int& seq){
visit[v] = 1;
arr[++seq] = v;
int j;
for(j=0; j<Nv; j++){
if( !visit[j] && Graph[v][j]){
DFS(j, arr, seq);
}
}
}
void print(int arr[], int len){
int i;
if(len>0){
printf("{ ");
for(i=0; i<len; i++){
printf("%d ", arr[i]);
}
printf("}\n");
}
}
void clearVisit(){
int i;
for(i=0; i<Nv; i++){
visit[i] = 0;
}
}
06-Graph1- list component
最新推荐文章于 2024-10-20 10:43:07 发布