算法實驗一(主要是爲以後的圖算法作前期準備工做)ios
->生成100個頂點的圖,隨機生成頂點算法
->無向圖大約1000條邊數組
->有向圖大約2000條邊dom
->計算每一個頂點的度函數
->首先默認每條邊的權重爲1,隨以後的實驗內容再進行修改spa
使用鄰接矩陣的方式存儲該圖。code
1 /***************************************************************************** 2 *算法實驗一; 3 *->生成100個頂點的圖,隨機生成頂點 4 *->無向圖大約1000條邊 5 *->有向圖大約2000條邊 6 *->計算每一個頂點的度 7 *****************************************************************************/ 8 #include<iostream> 9 #include<cmath> 10 #include<ctime> 11 using namespace std; 12 13 #define maxvertexnum 100 /*最大頂點數設爲100*/ 14 #define infinity 2147483647 /*當兩點不連通時,則它們之間距離爲最大值*/ 15 typedef int vertextype;/*頂點的類型爲整型*/ 16 typedef int edgetype;/*邊的權重爲整形*/ 17 18 enum GraphType{DG,UG};/*有向圖,無向圖*/ 19 struct MGraph//鄰接矩陣表示法的結構和類型聲明 20 { 21 vertextype V[maxvertexnum];//頂點集 22 edgetype E[maxvertexnum][maxvertexnum];//邊集 23 int n,e;//頂點數,邊數 24 enum GraphType GType;//設定圖的類型 25 }; 26 27 int randomnum()//返回一個0-99之間的隨機數 28 { 29 int a; 30 //srand(time(NULL));//設置隨機數種子,使每次運行獲取的隨機數不一樣 31 a=rand()%100; 32 33 return a; 34 } 35 int* countedge(MGraph *G)//函數返回一個數組 36 { 37 int i,j,countnum=0; 38 int *sum=new int[100]; 39 for(i=0;i<G->n;i++) 40 { 41 countnum=0;//到達下一個頂點時置0 42 for(j=0;j<G->n;j++) 43 { 44 if(G->E[i][j]==1) 45 { 46 countnum+=1; 47 sum[i]=countnum;//計算每個頂點的度 48 } 49 } 50 } 51 return sum; 53 } 54 55 void CreateMGraphUG(MGraph *G)//生成無向圖 56 { 57 int i,j,k,w; 58 G->GType=UG;//無向圖 59 G->n=100; 60 G->e=1000; 61 for(i=0;i<G->n;i++) 62 { 63 G->V[i]=i;//爲每一個頂點都編號從0-99 64 } 65 66 for(i=0;i<G->n;i++) 67 { 68 for(j=0;j<G->n;j++) 69 { 70 G->E[i][j]=0;//初始化鄰接矩陣 71 } 72 } 73 74 for(k=0;k<G->e;k++) 75 { 76 i=randomnum();//隨機生成任意兩頂點 77 j=randomnum(); 78 //cout<<i<<" "<<j<<"\t"; 79 G->E[i][j]=1;//創建鄰接矩陣,邊的權重都爲1 80 G->E[j][i]=1;//由於是無向圖,因此要對稱 81 } 82 83 } 84 85 void CreateMGraphDG(MGraph *G)//生成有向圖 86 { 87 int i,j,k,w; 88 G->GType=DG;//有向圖 89 G->n=100; 90 G->e=2000; 91 for(i=0;i<G->n;i++) 92 { 93 G->V[i]=i;//爲每一個頂點都編號從0-99 94 } 95 96 for(i=0;i<G->n;i++) 97 { 98 for(j=0;j<G->n;j++) 99 { 100 G->E[i][j]=infinity;//初始化鄰接矩陣 101 } 102 } 103 104 for(k=0;k<G->e;k++) 105 { 106 i=randomnum();//隨機生成任意兩頂點 107 j=randomnum(); 108 G->E[i][j]=1;//創建鄰接矩陣,邊的權重都爲1 109 } 110 111 } 112 113 int main() 114 { 115 MGraph *UGG=new MGraph;//無向圖 116 MGraph *DGG=new MGraph;//有向圖 117 int *ug=new int[100]; 118 int *dg=new int[100]; 119 120 cout<<"在無向圖中"<<endl; 121 CreateMGraphUG(UGG); 122 ug=countedge(UGG); 123 for(int i=0;i<100;i++) 124 { 125 cout<<"頂點 【"<<UGG->V[i]<<"】的度爲"<<ug[i]<<endl; 126 } 127 128 cout<<"在有向圖中"<<endl; 129 CreateMGraphUG(DGG); 130 dg=countedge(DGG); 131 for(int i=0;i<100;i++) 132 { 133 cout<<"頂點 【"<<DGG->V[i]<<"】的度爲"<<dg[i]<<endl; 134 } 135 136 return 0; 137 }
上述代碼還有不少須要改進之處,期待指正和探討。blog
於2017年4月3日編輯完成。get