【数据结构类】无向图的邻接矩阵表示法

无向图的遍历实现
本文介绍了一种使用邻接矩阵表示无向图的方法,并实现了图的创建、深度优先遍历和广度优先遍历等功能。代码示例采用模板类形式,适用于字符型顶点信息。

采用邻接矩阵表示无向图,完成图的创建、图的深度优先遍历、图的广度优先遍历操作。其中图的顶点信息是字符型,图中顶点序号按字符顺序排列。排列。

 

代码如下:

  }

#include <iostream>    
002.using namespace std; 
003.const int Maxsize = 30; 
004.template <class T> 
005.class Mgraph 
006.
007.public
008.Mgraph(); 
009.void Plist (); 
010.void Dfstraverse(int v); 
011.void Bfstraverse(int v);  
012.T vertex[Maxsize];   
013.int arc[Maxsize][Maxsize];   
014.int vertexNum, arcNum;  
015.void creat(); 
016.}; 
017.template <class T> 
018.Mgraph<T>::Mgraph () 
019.
020.creat (); 
021.
022.template <class T> 
023.void Mgraph<T>::creat () 
024.
025.int n, e, i, j, k; 
026.char a[30]; 
027.cin >> n >> e; 
028.vertexNum = n; 
029.arcNum = e; 
030.for (i = 0; i < vertexNum; i++) 
031.
032.cin >> a[i]; 
033.}       
034.for (i = 0; i < vertexNum; i++) 
035.vertex[i] = a[i]; 
036.for (i = 0; i < vertexNum; i++)   
037.for (j = 0; j < vertexNum; j++)  
038.arc[i][j] = 0;  
039.for (k = 0; k < arcNum; k++) 
040.
041.cin >> i >> j; 
042.arc[i][j] = 1; 
043.arc[j][i] = 1; 
044.
045.
046.template <class T> 
047.void Mgraph<T>::Plist() 
048.
049.int i, j; 
050.for (i = 0; i < vertexNum; i++) 
051.
052.cout << vertex[i] << " "
053.
054.cout << endl; 
055.for (i = 0; i < vertexNum; i++) 
056.
057.for (j = 0; j < vertexNum; j++) 
058.
059.cout << arc[i][j] << " "
060.
061.cout << endl; 
062.
063.
064.int visited[Maxsize]; 
065.template <class T> 
066.void Mgraph<T>::Dfstraverse(int v) 
067.
068.int j; 
069.cout << vertex[v] << " "
070.visited[v] = 1; 
071.for (j = 0; j < vertexNum; j++) 
072.
073.if (arc[v][j] == 1 && visited[j] == 0) 
074.
075.Dfstraverse(j); 
076.
077.
078.
079.int visited1[Maxsize]; 
080.template <class T> 
081.void Mgraph<T>::Bfstraverse(int v) 
082.
083.int Q[30]; 
084.int front, rear, j;  
085.front = rear = -1; 
086.cout << vertex[v] << " "
087.visited1[v] = 1; 
088.Q[++rear] = v; 
089.while (front != rear) 
090.
091.v = Q[++front]; 
092.for (j = 0; j < vertexNum; j++) 
093.
094.if (arc[v][j] == 1 && visited1[j] == 0) 
095.
096.cout << vertex[j] << " "
097.visited1[j] = 1; 
098.Q[++rear] = j; 
099.
100.
101.}   
102.}    
103.int main () 
104.
105.Mgraph<char>ma; 
106.int i;    
107.if (ma.vertexNum == 0) 
108.return 0;    
109.ma.Plist(); 
110.for (i = 0; i < ma.vertexNum; i++) 
111.
112.if (visited[i] == 0) 
113.ma.Dfstraverse(i);        
114.}    
115.cout<< endl; 
116.for (i = 0; i < ma.vertexNum; i++) 
117.
118.if (visited1[i] == 0) 
119.ma.Bfstraverse(i);        
120.}    
121.cout << endl;  
122.return 0; 
123.
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值