图的邻接矩阵建立以及遍历方法

//图的邻接矩阵构造方法,以及DFS,BFS操作;

#include<stdio.h>
#include<string.h>
#include<queue>

using namespace std;

#define Max 20
int visited[20];

typedef struct 
{
    char vex[Max];
    int vexs[Max][Max];
    int vexnum,arcnum;
}MGraph;

int Loca(MGraph &G,char ch)
{
    int i;
    for(i=0;i<G.vexnum;i++)
    {
        if(ch==G.vex[i])
            return i;
    }
        return -1;
}


void Creat_vex(MGraph &G)
{
    int i,j;
    int la1,la2;
    char ch1,ch2;
    scanf("%d%d",&G.vexnum,&G.arcnum);
    for(i=0;i<G.vexnum;i++)
    {
        getchar();
        scanf("%c",&G.vex[i]);
    }
    for(i=0;i<G.vexnum;i++)
        for(j=0;j<G.vexnum;j++)
            G.vexs[i][j]=0;
    for(i=0;i<G.arcnum;i++)
    {
        getchar();
        scanf("%c %c",&ch1,&ch2);
        la1=Loca(G,ch1);	
        la2=Loca(G,ch2);
        G.vexs[la1][la2]=1;
        G.vexs[la2][la1]=G.vexs[la1][la2];
    }
    for(i=0;i<G.vexnum;i++)
    {
        for(j=0;j<G.vexnum;j++)
            printf("%d  ",G.vexs[i][j]);
        putchar ('\n');
    }
    
    
}

void DFS(MGraph G,int v)
{
    visited[v]=1;
    printf("%c ",G.vex[v]);
    for(int i=0;i<G.vexnum;i++)
    {
        if(!visited[i]&&G.vexs[v][i])
            DFS(G,i);	
    }
}

void DFS_Travel(MGraph G)
{
    int v;
    for(v=0;v<G.vexnum;v++)
        visited[v]=0;
    for(v=0;v<G.vexnum;v++)
        if(!visited[v])
            DFS(G,v);
}

void BFS_Travel(MGraph G)
{
    queue<char>Q;
    int i,j,k;
    char ch;
    for(i=0;i<G.vexnum;i++)
    {
        if(!visited[i])
        {
            visited[i]=1;
            printf("%c ",G.vex[i]);
            Q.push(G.vex[i]);
            while(!Q.empty())
            {
                ch=Q.front();
                Q.pop();
                k=Loca(G,ch);
                for(j=0;j<G.vexnum;j++)
                {
                    if(!visited[j]&&G.vexs[k][j])
                    {
                        visited[j]=1;
                        printf("%c ",G.vex[j]);
                        Q.push(G.vex[j]);
                    }
                }
            }
        }
    }

}

int main()
{
    MGraph G;
    Creat_vex(G);
    DFS_Travel(G);
    memset(visited,0,sizeof(visited));
    putchar('\n');
    BFS_Travel(G);
    putchar('\n');

    return 0;
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/oliver233/article/details/49453825
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞