有向網 無向網的建立(數組標記法) 和深度優先訪問

來源:互聯網
上載者:User
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR -1#define OVERFLOW 0#define MAXVER 20  //定義最大定點數#define MAXINT 200  //定義無窮大typedef enum{UDG,UDN,DG,DN} GraphKind;// 定義無向圖 無向網 有向圖 有向網typedef char verType;  //定義頂點類型typedef int status ;typedef struct {verType verx[MAXINT];  //定義頂點    int arcs[MAXVER][MAXVER]; //定義弧int vernum,arcsnum;//定義最大頂點數 和弧GraphKind kind;  //類別}MGraph;int visited[MAXVER]={0};  //頂點剛開始都沒被訪問過 //尋找頂點在數組中的下標int locate(MGraph G,verType ch){int i;    for(i=0;i<G.vernum&&ch!=G.verx[i];i++);return i;}//建立無向網status createUDN(MGraph &G,int &v){int i,j,w,k;verType ch1,ch2;printf("請輸入無向網的頂點數和弧數:格式如2 3\n");scanf("%d%d",&G.vernum,&G.arcsnum); fflush(stdin);printf("請輸入頂點符號:\n");for(i=0;i<G.vernum;i++){scanf("%c",&G.verx[i]);fflush(stdin);}for(i=0;i<G.vernum;i++){for(j=0;j<G.vernum;j++)G.arcs[i][j]=MAXINT;  //賦初值為無窮大}printf(" 請輸入頂點符號和權值:格式A B 3\\n \n");for(i=0;i<G.arcsnum;i++){printf("請輸入第%d對值\n",i+1);scanf("%c %c %d",&ch1,&ch2,&w);  //輸入頂點符號和權值fflush(stdin); k=locate(G,ch1);   //獲得頂點下標j=locate(G,ch2);G.arcs[k][j]=w;  //為臨界矩陣賦值G.arcs[j][k]=G.arcs[k][j];  //無向圖為對稱矩陣}return OK;}//建立有向網status createDN(MGraph &G,int &v){int i,j,w,k;verType ch1,ch2;printf("請輸入有向網的頂點數和弧數:格式如2 3\n");scanf("%d%d",&G.vernum,&G.arcsnum); //  頂點數和弧數輸入fflush(stdin);  //清除斷行符號printf("請輸入頂點符號:\n");for(i=0;i<G.vernum;i++){scanf("%c",&G.verx[i]);   //頂點符號輸入fflush(stdin);}for(i=0;i<G.vernum;i++){for(j=0;j<G.vernum;j++)G.arcs[i][j]=MAXINT;  //賦初值為無窮大}printf(" 請輸入頂點符號和權值:格式A B 3\\n \n");for(i=0;i<G.arcsnum;i++){printf("請輸入第%d對值\n",i+1);scanf("%c %c %d",&ch1,&ch2,&w);  //輸入頂點符號和權值fflush(stdin); k=locate(G,ch1);   //獲得頂點下標j=locate(G,ch2);G.arcs[k][j]=w;  //為臨界矩陣賦值//G.arcs[j][k]=G.arcs[k][j];  //無向圖為對稱矩陣}return OK;}//進行深度優先遍曆void DFS(MGraph G,int v){  //參數 1 圖 2傳遞進來下標 int i;    printf("%c ",G.verx[v]); visited[v]=1;for(i=0;i<G.vernum;i++)if(visited[i]==0 && G.arcs[v][i]<MAXINT){ //類型的判斷  是否被訪問過 是否是權值或邊    DFS(G,i);}}//進行圖的遍曆void DFSTravers(MGraph G){ int i;for(i=0;i<G.vernum;i++){   visited[i]=0;}for(i=0;i<G.vernum;i++){ if(visited[i]==0)DFS(G,i);}}int main(){MGraph G;int v=0;if(createUDN(G,v)){//建立無向圖printf("遍曆結果為:\n");   DFSTravers(G);  //進行無向圖的遍曆}if(createDN(G,v)){//建立有向圖printf("遍曆結果為:\n");   DFSTravers(G);  //進行有向圖的遍曆}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.