#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <queue>
#include <sstream>
#include <functional>
#include<iomanip>
using namespace std;
typedef struct{
vector<vector<int>> arcs;//邻接矩阵
vector<char> vexs;//顶点表
int vexnum, edgenum;//顶点数和边数
vector<bool> visited;
}Graph;
int locates(Graph *g, char ch)
{
int i = 0;
for (i = 0; i < g->vexnum; i++)
{
if (g->vexs[i] == ch)
{
break;
}
}
if (i >= g->vexnum)
{
return -1;
}
return i;
}
void CreateGraph(Graph &G)
{
cout<<"创建邻接矩阵的无向图:"<<endl;
int i,j,k,w;
//G5的存储:
G.vexnum = 8;
G.edgenum = 9;
G.visited=vector<bool>(G.vexnum, false);
for (i = 0; i < G.vexnum; ++i){
vector<int> a;
for (j = 0; j < G.vexnum; ++j) {
a.push_back(0);
}
G.arcs.push_back(a);
}
G.vexs.push_back('1');
G.vexs.push_back('2');
G.vexs.push_back('3');
G.vexs.push_back('4');
G.vexs.push_back('5');
G.vexs.push_back('6');
G.vexs.push_back('7');
G.vexs.push_back('8');
G.arcs[0][1] = 1;
G.arcs[1][0] = 1;
G.arcs[1][3] = 1;
G.arcs[3][1] = 1;
G.arcs[3][7] = 1;
G.arcs[7][3] = 1;
G.arcs[7][4] = 1;
G.arcs[4][7] = 1;
G.arcs[4][1] = 1;
G.arcs[1][4] = 1;
G.arcs[0][2] = 1;
G.arcs[2][0] = 1;
G.arcs[2][5] = 1;
G.arcs[5][2] = 1;
G.arcs[5][6] = 1;
G.arcs[6][5] = 1;
G.arcs[6][2] = 1;
G.arcs[2][6] = 1;
}
void DFS(Graph &g, int i){
cout << g.vexs[i]<<" ";
g.visited[i] = true;
for (int j = 0; j < g.vexnum; j++){
if (g.arcs[i][j] == 1 && !g.visited[j]){
DFS(g, j);
}
}
}
void DFSTraverse(Graph &g){//
for (int i = 0; i < g.vexnum; i++)
g.visited[i] = false;
for (int i = 0; i < g.vexnum; i++)
if (!g.visited[i]) DFS(g, i); //v未访问过,从vi开始DFS搜索
}
void BFSTraverse(Graph &g){
for (int i = 0; i < g.vexnum; i++)
g.visited[i] = false;
queue<int> q;
for (int i = 0; i < g.vexnum; i++){
if (!g.visited[i]){
g.visited[i] = true;
cout << g.vexs[i] << " ";
q.push(i);
while (!q.empty()){
int m = q.front();
q.pop();
for (int j = 0; j < g.vexnum; j++){
if (g.arcs[m][j] == 1 && !g.visited[j]){
g.visited[j] = true;
cout << g.vexs[j] << " ";
q.push(j);
}
}
}
}
}
}
//打印图
void printGraph(Graph g)
{
int i, j;
for (i = 0; i < g.vexnum; i++)
{
for (j = 0; j < g.vexnum; j++)
{
printf("%d ", g.arcs[i][j]);
}
printf("\n");
}
}
int main(){
Graph g;
//邻接矩阵创建图
CreateGraph(g);
printGraph(g);
BFSTraverse(g);
DFSTraverse(g);
return 0;
}
C++邻接表图操作
猜你喜欢
转载自blog.csdn.net/guiqulaxi920/article/details/62883542
今日推荐
周排行