#include <stdio.h>
#include <stdlib.h>
typedef struct Gnode *PtrToNode;
typedef PtrToNode LGraph;
struct Gnode{
int Data;
PtrToNode Next;
}ListGraph[12];
LGraph queue[100];
int rear=-1;
int front=-1;
int size=100;
int flag=0;
void InsertEdge();
void InitializeGraph();
void ADFS();
void ABFS();
void DFS(LGraph node);
void BFS(LGraph node);
LGraph DeQueue();
void EnQueue(LGraph node);
int N,E;
int VertexMonitor[12];
int false=0;
int true =1;
int main(){
int i;
scanf("%d %d",&N,&E);
InitializeGraph();
for(i=0;i<E;i++){
InsertEdge();
}
LGraph G=&ListGraph[1];
for(i=0;i<N;i++){
VertexMonitor[i]=false;
}
ADFS();
for(i=0;i<N;i++){
VertexMonitor[i]=false;
}
ABFS();
}
void ADFS(){
int V1;
for(V1=0;V1<N;V1++){
if(!VertexMonitor[V1]){
if(flag)printf("\n");
flag=1;
printf("{ ");
DFS(&ListGraph[V1]);
printf("}");
}
}
}
void DFS(LGraph G){
while(G){
if(!VertexMonitor[G->Data]){
printf("%d ",G->Data);
VertexMonitor[G->Data]=true;
if(G->Next)if(!VertexMonitor[G->Next->Data])DFS(&ListGraph[G->Next->Data]);
}
G=G->Next;
}
}
void ABFS(){
int V1;
for(V1=0;V1<N;V1++){
if(!VertexMonitor[V1]){
printf("\n");
printf("{ ");
BFS(&ListGraph[V1]);
printf("}");
}
}
}
void BFS(LGraph node){
EnQueue(node);
VertexMonitor[node->Data]=true;
LGraph G;
while(G=DeQueue()){
printf("%d ",G->Data);
while(G->Next){
if(!VertexMonitor[G->Next->Data])VertexMonitor[G->Next->Data]=true,EnQueue(&ListGraph[G->Next->Data]);
G=G->Next;
}
}
}
void EnQueue(LGraph node){
rear = 1+rear%size;
queue[rear]=node;
}
LGraph DeQueue(){
if(front==rear)return NULL;
front = 1+front%size;
LGraph G = queue[front];
return G;
}
void InitializeGraph(){
int i;
for(i=0;i<12;i++)
{ ListGraph[i].Data=i;
ListGraph[i].Next=NULL;
}
}
void InsertEdge(){
int V1,V2;
scanf("%d %d",&V1,&V2);
LGraph G=&ListGraph[V1];
LGraph G1;
while(G->Next){
if(G->Next->Data>V2)break;
G=G->Next;
}
G1=G->Next;
G->Next=malloc(sizeof(struct Gnode));
G->Next->Next=G1;
G->Next->Data=V2;
G=&ListGraph[V2];
while(G->Next){
if(G->Next->Data>V1)break;
G=G->Next;
}
G1=G->Next;
G->Next=malloc(sizeof(struct Gnode));
G->Next->Next=G1;
G->Next->Data=V1;
}
dfs与bfs
最新推荐文章于 2024-07-15 17:29:31 发布