dfs与bfs

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值