邻接矩阵实现
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef int T; //顶点的值的类型int,char,double and so on
const int maxsize = 20;
const int infinity = 65535;
class Node //顶点类
{
public:
T value; //顶点值
int numbers; //顶点编号
};
class Edge //边类 边集数组
{
public:
int num1; //起始顶点
int num2; //终止顶点
int weight; //权值
};
class Graph
{
private:
int vertex_nums; //顶点数
int edge_nums; //边数
vector<Node> vertex; //顶点表
vector<Edge> edge; //边表
vector<vector<int>> edge_maze; //邻接矩阵
bool visited[maxsize]; //访问标志的数组
vector<int> P;
vector<int> D;
void DFS(int i);
vector<vector<int>> D_F;
vector<vector<int>> P_F;
public:
Graph(int n = 10, int m = 10)
:vertex_nums(n), edge_nums(m)
{
for (int i = 0; i < vertex_nums; i++) //顶点表初始化
{
Node a;
a.numbers = i;
a.value = i*i;
vertex.push_back(a);
}
for (int i = 0; i < vertex_nums; i++) //邻接矩阵初始化
{
vector<int> temp(vertex_nums, 0);
edge_maze.push_back(temp);
}
for (int i = 0; i < vertex_nums; i++)
{
for (int j = 0; j < vertex_nums; j++)
{
edge_maze[i][j] = infinity;
edge_maze[i][i] = 0;
}
}
cout << "please input the edges about the graph:vertex_number1 vertex_number2 weight" << endl;
int x, y, z;
for (int i = 0; i < edge_nums; i++)
{
cin >> x >> y >> z;
Edge edge_temp;
edge_temp.num1 = x;
edge_temp.num2 = y;
edge_temp.weight = z;
edge.push_back(edge_temp);
edge_maze[x][y] = edge_maze[y][x] = z;
}
for (int i = 0; i < vertex_nums; i++)
{
visited[i] = false; //初始所有状态点都是未访问过的
}
}
void print_edge_maze() //邻接矩阵显示
{
cout << endl;
cout << "输出邻接矩阵" << endl;
cout << " ";
for (int i = 0; i < vertex_nums; i++)
{
cout << "v" << i << " ";
}
cout << endl;
for (int i = 0; i < vertex_nums; i++)
{
cout << "v" << i << " ";
for (int j = 0; j < vertex_