圖的大總結
阿新 • • 發佈:2018-12-16
一、資料結構定義
1.鄰接矩陣的定義:
const int MAX=100; //頂點數目的最大值
struct MatrixG{ int vexNum; //頂點數 int edgeNum; //邊數 char vex[MAX]; //頂點表 int edge[MAX][MAX]; //邊表 };
2.鄰接表的定義:
const int MAX=100; //頂點數目的最大值 struct ENode{ // 邊表結點 int adjvex; // 該弧所指向的頂點的位置int info; //邊的權值 ENode *next; // 指向下一條弧的指標 }; struct VNode //頂點表結點 { char data; // 頂點資訊 ENode *first; // 指向第一條依附該頂點的弧的指標 }; struct AlistG{ int vexNum; // 圖的頂點數 int arcNum; // 圖的弧數 VNode *vexs[MAX]; //鄰接表 };
二、鄰接矩陣和鄰接表的轉換
1.鄰接矩陣轉鄰接表
void MatrixGToAlistG(MatrixG mg,AlistG ag){ int n=mg->vexNum; for(int i=1;i<=n;++i) //鄰接表表頭初始化 ag[i].first=NULL; for(int i=1;i<n;++i) for(int j=1;j<=n;++j){ if(mg->edge[i][j]==1){ //如果i與j鄰接,則將j插入i的鄰接表中 ENode *p=new ENode; p->adjvex=j; p->next=ag[i]->first; ag[i]->first=p; } }
2.鄰接錶轉鄰接矩陣
void AlistGToMatrixG(AlistG ag,MatrixG mg){ int n=mg->vexNum; for(int i=1;i<=n;++i) //鄰接矩陣初始化 for(int j=1;j<=n;++j) mg->edge[i][j]=0; for(int i=1;i<=n;++i){ p=ag[i]->first; //取第一個鄰接點 while(p){ mg->edge[i][p->adjvex]=1; p=p->next; } } }
三、圖的遍歷
1.圖的廣度優先搜尋遍歷
2.圖的深度優先搜尋遍歷(遞迴)
3.圖的深度優先搜尋遍歷(非遞迴)