6-25 圖的深度遍歷-鄰接矩陣實現 (10分)

 

本題要求實現鄰接矩陣存儲圖的深度優先遍歷。

函數接口定義:


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;
}
/* 你的代碼將被嵌在這裏 */

對於給定圖:

圖的遍歷樣例.png

輸入樣例:

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);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章