1. 程式人生 > >鄰接矩陣建立無向圖

鄰接矩陣建立無向圖

#include<iostream>
using namespace std;
const int MaxSize=10;
class MGraph
{public:
MGraph(int n,int e){vertexNum=n;arcNum=e;
for(int i=0;i<vertexNum;i++){cout<<"請輸入第"<<i<<"個頂點資料:";int x;cin>>x;vertex[i]=x;visited1[i]=0;visited2[i]=0;}
for(int z=0;z<vertexNum;z++)
 for(int j=0;j<vertexNum;j++)
  arc[z][j]=0;
  for(int k=0;k<arcNum;k++)
  {int a,b;cout<<"請輸入邊"<<k<<"依附的兩個頂點:";cout<<"第一個頂點:";cin>>a;cout<<"第二個頂點:";cin>>b;arc[a][b]=1;arc[b][a]=1;}}
void DFSTraverse(int v){cout<<vertex[v];visited1[v]=1;
for(int j=0;j<vertexNum;j++)if(arc[v][j]==1&&visited1[j]==0)DFSTraverse(j);}

void BFSTraverse(int v){int Q[MaxSize];int front,rear;front=rear=-1;cout<<vertex[v];visited2[v]=1;Q[++rear]=v;
while(front!=rear){v=Q[++front];for(int j=0;j<vertexNum;j++)
if(arc[v][j]==1&&visited2[j]==0){cout<<vertex[j];visited2[j]=1;Q[++rear]=j;}}}
private:
	int vertex[MaxSize];
	int arc[MaxSize][MaxSize];
	int visited1[MaxSize];int visited2[MaxSize];
	int vertexNum,arcNum;
};
int main()
{cout<<"頂點數:";int a;cin>>a;
cout<<"邊數:";int b;cin>>b;
MGraph M(a,b);
cout<<"深度優先遍歷:";cout<<"選擇第一個訪問的頂點:";int top1;cin>>top1;M.DFSTraverse(top1);cout<<endl;
cout<<"廣度優先遍歷:";cout<<"選擇第一個訪問的頂點:";int top2;cin>>top2;M.BFSTraverse(top2);cout<<endl;
return 0;}