图的创建以及遍历(还没写完
参考文章:
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!