/*圖的相鄰矩陣儲存類型定義*/
#define MaxVertexNum 100 /*最大頂點數設爲100*/
typedef char VertexType; /*頂點類型設爲字符型*/
typedef int EdgeType; /*邊的權值設爲整型*/
typedef struct {
VertexType vexs[MaxVertexNum]; /*頂點表*/
EdgeType edges[MaxVertexNum][MaxVertexNum]; /*鄰接矩陣,即邊表*/
int numVertex,numEdge; /*頂點數和邊數*/
}Mgragh,*MGragh; /*Maragh 是以鄰接矩陣存儲的圖類型*/
/*建立有向圖G 的鄰接矩陣存儲*/
void CreateMGraph(MGragh G){
int i,j,k,w;
char ch;
printf("請輸入頂點數和邊數\n" );
scanf("%d%d",&i,&j);
G->numVertex=i;
G->numEdge=j;
/*輸入頂點信息,建立頂點表*/
printf("請輸入頂點信息:\n");
for (i=0;i<G->numVertex;i++) {
printf("第%d個點\n", i);
scanf("%s",&G->vexs[i]);
}
/*初始化鄰接矩陣*/
for (i=0;i<G->numVertex;i++)
for (j=0;j<G->numVertex;j++)
G->edges[i][j]=0;
/*輸入e 條邊,建立鄰接矩陣*/
printf("請輸入每條邊對應的兩個頂點的序號:\n");
for (k=0;k<G->numEdge;k++){
scanf("%d %d",&i,&j);
G->edges[i][j]=1;
}
}
//深度優先周遊
void DFS(MGragh G, int v){
mark[v]=TRUE;
cout<<G->vexs[v];
for(Edge e=FirstEdge(G,v);isEdge(G,e);e=NextEdge(G,e)){
if(mark[e.to]==FALSE) DFS(G,e.to);
}
}
void DFSM(MGragh G,int v){
for(int i=0;i<G->numVertex;i++){
mark[i]=FALSE;
}
DFS(G,0);
}
//廣度優先周遊
void BFS(MGragh G, int v){
for(int i=0;i<G->numVertex;i++){
mark[i]=FALSE;
}
using std::queue;
queue<int>Q;
cout<<G->vexs[v];
mark[v]=TRUE;
Q.push(v);
while(!Q.empty()){
int u=Q.front();
Q.pop();
for(Edge e=FirstEdge(G,u);isEdge(G,e);e=NextEdge(G,e))
if(mark[e.to]==FALSE){
cout<<G->vexs[e.to];
mark[e.to]=TRUE;
Q.push(e.to);
}
}
}
圖的鄰接矩陣存儲與訪問
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.