資源簡介
|利用鄰接矩陣創(chuàng)建圖
|顯示圖的鄰接矩陣
|求各頂點(diǎn)的度
|插入頂點(diǎn)
|插入弧
|刪除頂點(diǎn)
|刪除弧
|用鄰接矩陣創(chuàng)建鄰接表UDG
|顯示圖的鄰接表
|深度優(yōu)先便利序列
|廣度優(yōu)先便利序列
|圖的連通分支
|求最小生成樹
|求任意頂點(diǎn)到其它頂點(diǎn)的最短路徑
|求圖的深度優(yōu)先生成樹
|對生成樹進(jìn)行先序遍歷
代碼片段和文件信息
#include?
#include?
#include?
#define?MAX_VERTEX_NUM?20
#define?INFINITY?10000
typedef?struct?ArcCell{
int?adj;
}ArcCellAdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef?struct{
char?vexs[MAX_VERTEX_NUM];
AdjMatrix?arcs;
int?vexnumarcnum;
}MGraph;
//……………………查詢頂點(diǎn)位置…………………
int?LocateVex(MGraph?Gchar?v){
int?i=0;
while(G.vexs[i]!=v&&i i++;
return?i;
}
//……………………創(chuàng)建圖的鄰接矩陣…………………
MGraph?CreateMGraph(){
MGraph?G;
int?ijk;
int?w;
char?v1v2;
cout<<“請輸入圖的頂點(diǎn)數(shù):“;
cin>>G.vexnum;
cout<<“請輸入圖的弧數(shù):“;
cin>>G.arcnum;
for(i=0;i cout<<“請輸入第“< cin>>G.vexs[i];
}
for(i=0;i for(j=0;j G.arcs[i][j].adj=INFINITY;
for(k=0;k cout<<“請輸入弧“< cin>>v1>>v2>>w;
if(LocateVex(Gv1) i=LocateVex(Gv1);
else{
cout<<“沒有找到此頂點(diǎn)!“< k--;
continue;
}
if(LocateVex(Gv2) j=LocateVex(Gv2);
else{
cout<<“沒有找到此頂點(diǎn)!“< k--;
continue;
}
G.arcs[i][j].adj=w;
G.arcs[j][i]=G.arcs[i][j];
}
return?G;
}
//……………………輸出MGraph…………………
void?PrintMGraph(MGraph?G){
cout<<“-----------------圖的鄰接矩陣---------------“< int?ij;
for(i=0;i cout<<“ “< cout< for(?i=0;i cout< for(?j=0;j if(G.arcs[i][j].adj!=INFINITY)
cout< else
cout<<“∞“<<“ “;
}
cout< }
cout<<“--------------------------------------------“< }
//……………………求各個頂點(diǎn)的度…………………
void?Vdu(MGraph?G){ //求各個頂點(diǎn)的度
int?ij;
int?V[20];
for(i=0;i int?count=0;
for(j=0;j if(G.arcs[i][j].adj!=INFINITY)
count++;
V[i]=count;
}
for(i=0;i cout< }
//……………………插入頂點(diǎn)…………………
void?InsertVex(MGraph?&G){
char?v;
int?ij;
cout<<“請輸入你想插入的頂點(diǎn):“;
cin>>v;
i=G.vexnum++;
G.vexs[i]=v;
for(j=0;j G.arcs[i][j].adj=INFINITY;
j=G.vexnum-1;
for(i=0;i G.arcs[i][j].adj=INFINITY;
cout< }
//……………………插入弧…………………
void?InsertArc(MGraph?&G){
char?v1v2;
int?ijw;
cout<<“請輸入你要插入的弧所關(guān)聯(lián)的頂點(diǎn)和權(quán)值:“;
cin>>v1>>v2>>w;
if(LocateVex(Gv1) i=LocateVex(Gv1);
j=LocateVex(Gv2);
G.arcs[i][j].adj=w;
G.arcs[j][i]=G.arcs[i][j];
cout< }else{
cout<<“沒有找到關(guān)聯(lián)的頂點(diǎn)!“< }
}
//……………………刪除頂點(diǎn)…………………
void?DeleteVex(MGraph?&G){
int?ij;
char?v;
cout<<“請輸入你所要刪除的頂點(diǎn):“;
cin>>v;
if(LocateVex(Gv) int?l=LocateVex(Gv);
for(i=l;i G.vexs[i]=G.vexs[i+1];
for(i=l;i for(j=0;j G.arcs[i][j]=G.arcs[i+1][j];
for(i=0;i
評論
共有 條評論