小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

實(shí)驗(yàn)五?無(wú)向圖鄰接表存儲(chǔ)結(jié)構(gòu)的創(chuàng)建、遍歷及求連通分量

 昵稱1740930 2012-04-20

實(shí)驗(yàn)五 無(wú)向圖鄰接表存儲(chǔ)結(jié)構(gòu)的創(chuàng)建、遍歷及求連通分量

#include<iostream.h>
typedef char vextype;
const MAXVER=21;
typedef struct listnode      

 int adjvex;
 struct listnode* next;  
}listnode;//表結(jié)點(diǎn)                         
            
typedef struct
  
 vextype data;
 listnode  *first;
}headnode;//頭結(jié)點(diǎn)

typedef struct

 headnode vexs[MAXVER];
    int vexnum,arcnum;
} ALgraph;//圖

void createALgraph(ALgraph &G)
{
    int i, s, d;
    listnode *p,*q;
    cout<<"輸入圖的頂點(diǎn)數(shù)和邊數(shù):";
    cin>>G.vexnum>>G.arcnum;
    for(i=1;i<=G.vexnum;i++)
   
  cout<<"\n輸入第"<<i<<"個(gè)頂點(diǎn)信息:"; 
  cin>>G.vexs[i].data;
  G.vexs[i].first=NULL;
    } //輸入第i個(gè)結(jié)點(diǎn)值并初始化第i個(gè)單鏈表為空  
 for(i=1; i<=G.arcnum; i++)
   
  cout<<"\n輸入第"<<i<<"條邊的始點(diǎn)和終點(diǎn):";
        cin>>s>>d;//s為始點(diǎn),d為終點(diǎn)
        p=new listnode;        p->adjvex=d;
        p->next=G.vexs[s].first;
        G.vexs[s].first=p;
  //將新建的以d為信息的表結(jié)點(diǎn)p插入s單鏈表的頭結(jié)點(diǎn)后
        q=new listnode;        
  q->adjvex=s;
        q->next=G.vexs[d].first;
        G.vexs[d].first=q;
  //將新建的以s為信息的表結(jié)點(diǎn)q插入d單鏈表的頭結(jié)點(diǎn)后
    }
}

int visited[MAXVER];//定義全局?jǐn)?shù)組遍歷visited
void dfs(ALgraph G, int v)//被遍歷的圖G采用鄰接表作為存儲(chǔ)結(jié)構(gòu),v為出發(fā)頂點(diǎn)編號(hào)

 listnode *p;
 cout<<G.vexs[v].data;
 visited[v]=1;
 p=G.vexs[v].first;
 while(p!=NULL)
 {
  if(visited[p->adjvex]==0)  dfs(G,p->adjvex);
  //若p所指表結(jié)點(diǎn)對(duì)應(yīng)的鄰接頂點(diǎn)未訪問(wèn)則遞歸地從該頂點(diǎn)出發(fā)調(diào)用dfs
  p=p->next;
    }
}

void dfsTraverse(ALgraph G)

 int v;
 //遍歷圖之前初始化各未訪問(wèn)的頂點(diǎn)
 for(v=1; v<=G.vexnum; v++)
  visited[v]=0;
 //從各個(gè)未被訪問(wèn)過(guò)的頂點(diǎn)開(kāi)始進(jìn)行深度遍歷
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)   dfs(G,v);
}

void dsfComp(ALgraph G)
int v;
   //遍歷G以前,初始化visited數(shù)組為0
   for(v=1;v<=G.vexnum;v++)
         visited[v]=0;
   for(v=1;v<=G.vexnum;v++)
      if(visited[v]==0)
      {
    cout<<endl<<"\n一個(gè)深度遍歷連通分量為:";
          dfs(G,v);
   }
}

void BFS(ALgraph G, int v)
//從頂點(diǎn)編號(hào)v出發(fā),廣度遍歷鄰接表存儲(chǔ)的圖G
 
 int queue[MAXVER], front ,rear;
    listnode* p;
    front=rear=0;
    cout<<G.vexs[v].data;
    visited[v]=1;
    queue[++rear]=v;
    while(front!=rear)
 
  v=queue[++front];
  p=G.vexs[v].first;
  while(p!=NULL)
   
   if(visited[p->adjvex]==0)
   
    v=p->adjvex;
    cout<<G.vexs[v].data;
    visited[v]=1;
    queue[++rear]=v;
   }
   p=p->next;
  }
 }
}

void BFSTraverse(ALgraph G)
{
 int v;
 //遍歷G以前,初始化visited數(shù)組為0
 for(v=1;v<=G.vexnum;v++)
  visited[v]=0;
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)
   BFS(G,v);
}

void BFSComp(ALgraph G)

 int v;
 //遍歷G以前,初始化visited數(shù)組為0
 for(v=1;v<=G.vexnum;v++)
  visited[v]=0;
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)
  {
   cout<<endl<<"\n一個(gè)廣度遍歷連通分量為:";
   BFS(G,v);
  }
}


void main()
{
 ALgraph g;
 createALgraph(g);
 cout<<endl<<"深度遍歷結(jié)果為:";
 dfsTraverse(g);
 dsfComp(g);
 cout<<endl<<"廣度遍歷結(jié)果為:";
 BFSTraverse(g);
 BFSComp(g);
 cout<<endl;
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多