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

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

 

代码如下:

  }

#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.
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值