# 图的邻接矩阵和DFS遍历

23 篇文章 27 订阅

### 代码实现

#include <stdio.h>
#include <stdlib.h>
//const int MAXVEX = 100;
#define MAXVEX 100
#define INFINITT 65535  //表示无穷
int visited[MAXVEX];

typedef struct{
char vexs[MAXVEX];//顶点表
int arc[MAXVEX][MAXVEX];//边表
int numV, numE;//顶点数和边数
}MGraph;

void createGraph(MGraph *G){
int i,j,k,w;
printf("请输入顶点数和边数：");
scanf("%d%d", &G->numV, &G->numE);
//建立结点
for(i = 0; i < G->numV; i++){
scanf("%d", &G->vexs[i]);
}
//初始化边为无穷
for(i = 0; i < G->numV; i++){
for(j = 0; j < G->numV; j++){
G->arc[i][j] = INFINITT;
}
}
//建立边
printf("输入边的左右两个坐标:\n");
for(k = 0; k < G->numE; k++){
scanf("%d%d%d", &i,&j,&w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];
}
}

int main(){
MGraph G;
createGraph(&G);
}

### 二、图的DFS遍历

#### 代码实现

void DFS(MGraph G, int i){
int j;
printf("%d ", G.vexs[i]);
visited[i] = 1;
for(j = 0; j < G.numV; j++){
if(G.arc[i][j] != 0 && G.arc[i][j] != INFINITT && !visited[j]){
DFS(G, j);
}
}
}

void DFSTraverse(MGraph G){
int i;
for(i = 0; i < G.numV; i++){
visited[i] = 0;
}
for(i = 0; i < G.numV; i++){
if(!visited[i]){
DFS(G, i);
}
}
}

### 完整代码

include <stdlib.h>
//const int MAXVEX = 100;
#define MAXVEX 100
#define INFINITT 65535  //表示无穷
int visited[MAXVEX];

typedef struct{
char vexs[MAXVEX];//顶点表
int arc[MAXVEX][MAXVEX];//边表
int numV, numE;//顶点数和边数
}MGraph;

void createGraph(MGraph *G){
int i,j,k,w;
printf("请输入顶点数和边数：");
scanf("%d%d", &G->numV, &G->numE);
//建立结点
for(i = 0; i < G->numV; i++){
scanf("%d", &G->vexs[i]);
}
//初始化边为无穷
for(i = 0; i < G->numV; i++){
for(j = 0; j < G->numV; j++){
G->arc[i][j] = INFINITT;
}
}
//建立边
printf("输入边的左右两个坐标:\n");
for(k = 0; k < G->numE; k++){
scanf("%d%d%d", &i,&j,&w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];
}
}

void DFS(MGraph G, int i){
int j;
printf("%d ", G.vexs[i]);
visited[i] = 1;
for(j = 0; j < G.numV; j++){
if(G.arc[i][j] != 0 && G.arc[i][j] != INFINITT && !visited[j]){
DFS(G, j);
}
}
}

void DFSTraverse(MGraph G){
int i;
for(i = 0; i < G.numV; i++){
visited[i] = 0;
}
for(i = 0; i < G.numV; i++){
if(!visited[i]){
DFS(G, i);
}
}
}

int main(){
MGraph G;
createGraph(&G);
DFSTraverse(G);
}

• 20
点赞
• 87
收藏
觉得还不错? 一键收藏
• 2
评论
01-13 239
05-12 1954
10-07 899
05-26
05-26
10-24 1323
04-14 6200
11-01 3533
04-28 1168
04-30 2300

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

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