图的创建以及遍历(还没写完

参考文章:

https://blog.csdn.net/aaa_cainiao_66666/article/details/81510327

 

我写的代码(其实基本上就是上面参考文章的整合,但是写了很多注释):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Graph{
    int nVertex;
    int nEdge;
    int *nMatrix;
}Graph;

//按邻接矩阵创建图
Graph *CreateGraph()
{
    //请求空间
    Graph *pGraph = (Graph *)malloc(sizeof(Graph));
    //获取点和边的信息
    scanf("%d %d", &nV, &nE);
    pGraph.nVertex = nV;
    pGraph.nEdge = nE;
    //根据点构建邻接矩阵
    pGraph.nMatrix = (int *)malloc(sizeof(int)*nV*nV);
    //初始化邻接矩阵
    memset(pGraph.nMatrix, 0, sizeof(int)*nV*nV);
    //定义输入边
    int Ver1,Ver2;
    //将边的信息转化为邻接矩阵
    for(int i=0;i<nE;i++)
    {
        //边的信息
        scanf("%d %d", &Ver1, &Ver2);
        
        
    }
    
}

//深度优先遍历
void DFS(Graph *HGraph)
{
    
}

//广度优先遍历
void BFS(Graph *HGraph)
{
    
}
 
int main()
{
    int n,m;
    Graph *HGraph = NULL;
    scanf("%d %d", &n, &m);
    if(m>0)
        HGraph = CreateGraph();
    //先深度优先遍历
    DFS(HGraph);
    printf("\n");
    //再广度优先遍历
    BFS(HGraph);
    return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Graph
{
    int nVertex;
    int nEdge;
    int *nMatrix;
} Graph;

//按邻接矩阵创建图
Graph *CreateGraph()
{
    int nV, nE;
    //请求空间
    Graph *pGraph = (Graph *)malloc(sizeof(Graph));
    //获取点和边的信息
    scanf("%d %d", &nV, &nE);
    pGraph->nVertex = nV;
    pGraph->nEdge = nE;
    //根据点构建邻接矩阵
    pGraph->nMatrix = (int *)malloc(sizeof(int) * nV * nV);
    //初始化邻接矩阵
    memset(pGraph->nMatrix, 0, sizeof(int) * nV * nV);
    //定义输入边
    int Ver1, Ver2;
    //将边的信息转化为邻接矩阵
    for (int i = 0; i < nE; i++)
    {
        //输入边的信息
        scanf("%d %d", &Ver1, &Ver2);
        //由于是向图,所以邻接矩阵里要放两个.(从0开始,有的地方是需要做判断的)
        pGraph->nMatrix[Ver2 * nV + Ver1] = 1;
        pGraph->nMatrix[Ver1 * nV + Ver2] = 1;
    }
    return pGraph;
}

//深度优先遍历
void DFSTraverse(Graph *HGraph, int nBegin, int *pMark)
{
    printf("%d ", nBegin);
    pMark[nBegin] = 1; //表示该点已经被遍历
    for (int i = 0; i < HGraph->nVertex; i++)
    {
        if (HGraph->nMatrix[i * HGraph->nVertex + nBegin] == 1 && pMark[i] == 0)
            DFSTraverse(HGraph, nBegin, pMark);
    }
}
//深度优先遍历初始化函数
void DFS(Graph *HGraph, int nBegin)
{
    // nBegin定义开始的结点
    // pMark用来标记结点是否已经遍历
    int *pMark = (int *)malloc(sizeof(int) * HGraph->nVertex);
    memset(pMark, 0, HGraph->nVertex);
    printf("DeBug");
    DFSTraverse(HGraph, nBegin, pMark);
    //释放pMark
    free(pMark);
    pMark = NULL;
}

//广度优先遍历
void BFSTraverse(Graph *HGraph)
{
}

int main()
{
    int n, m;
    Graph *HGraph = NULL;
    // VSC中 Shift + Alt + F 快速整理代码
    while (scanf("%d %d", &n, &m) != EOF)
    {
        if (m > 0)
            HGraph = CreateGraph();
        //先深度优先遍历
        DFS(HGraph, 0);
        printf("\n");
        //再广度优先遍历
        BFSTraverse(HGraph);
    }
    return 0;
}
 
posted @   br0sy  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示