dfs与bfs

来源:互联网 发布:设计画册的软件 编辑:程序博客网 时间:2024/06/06 19:25
#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;}
原创粉丝点击