圖的鄰接矩陣存儲與訪問

 /*圖的相鄰矩陣儲存類型定義*/
#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);
            }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章