本題要求實現鄰接矩陣存儲圖的深度優先遍歷。
函數接口定義:
void DFS(MGraph G,Vertex v);
其中MGraph是鄰接矩陣存儲的圖,定義如下:
#define MaxVertexNum 10 /*定義最大頂點數*/
typedef int Vertex;/* 用頂點下標表示頂點,爲整型 */
typedef struct{
int arcs[MaxVertexNum][MaxVertexNum]; /*鄰接矩陣*/
int vexnum,arcnum; /*圖中的頂點數vexnum和邊數arcnum*/
}MGraph; /*用鄰接矩陣表示的圖的類型*/
裁判測試程序樣例:
#include"stdio.h"
#include"stdlib.h"
typedef enum{FALSE,TRUE} Boolean;
#define MaxVertexNum 10 /*定義最大頂點數*/
typedef int Vertex;/* 用頂點下標表示頂點,爲整型 */
typedef struct{
int arcs[MaxVertexNum][MaxVertexNum]; /*鄰接矩陣*/
int vexnum,arcnum; /*圖中的頂點數vexnum和邊數arcnum*/
}MGraph; /*用鄰接矩陣表示的圖的類型*/
Boolean visited[MaxVertexNum]; /* 頂點的訪問標記 */
void CreatMGraph(MGraph *G);/* 創建圖並且將Visited初始化爲false;裁判實現,細節不表 */
void DFS(MGraph G,Vertex v);
int main()
{
Vertex v;
MGraph G;
CreatMGraph(&G);
scanf("%d", &v);
printf("DFS from %d:",v);
DFS(G,v);
return 0;
}
/* 你的代碼將被嵌在這裏 */
對於給定圖:
輸入樣例:
5
輸出樣例:
DFS from 5: 5 1 3 0 2 4 6
代碼:
#include"stdio.h"
#include"stdlib.h"
typedef enum{FALSE,TRUE} Boolean;
#define MaxVertexNum 10 /*定義最大頂點數*/
typedef int Vertex;/* 用頂點下標表示頂點,爲整型 */
typedef struct{
int arcs[MaxVertexNum][MaxVertexNum]; /*鄰接矩陣*/
int vexnum,arcnum; /*圖中的頂點數vexnum和邊數arcnum*/
}MGraph; /*用鄰接矩陣表示的圖的類型*/
Boolean visited[MaxVertexNum]; /* 頂點的訪問標記 */
void CreatMGraph(MGraph *G);/* 創建圖並且將Visited初始化爲false;裁判實現,細節不表 */
void DFS(MGraph G,Vertex v);
int main()
{
Vertex v;
MGraph G;
CreatMGraph(&G);
scanf("%d", &v);
printf("DFS from %d:",v);
DFS(G,v);
return 0;
}
/* 你的代碼將被嵌在這裏 */
void CreatMGraph(MGraph *G)
{
printf("請輸入頂點數和邊數\n");
scanf("%d%d",&G->vexnum,&G->arcnum);
int a,b;
for(int k = 0 ;k < G->arcnum ;k ++)
{
printf("請輸入相連通的點\n");
scanf("%d%d",&a,&b);
G->arcs[a][b] = 1;
G->arcs[b][a] = 1;
}
for(int i = 0 ;i < MaxVertexNum; i++)
visited[i] = FALSE;
}
void DFS(MGraph G,Vertex v)
{
visited[v] = TRUE;
printf(" %d",v);
// printf("%d",G.vexnum);
for(int i = 0 ;i < G.vexnum ;i++)
{
if(!visited[i]&&G.arcs[v][i]==1)
DFS(G,i);
}
}