数据结构--图的建立和遍历

有向图邻接矩阵、无向图邻接矩阵
#include<iostream>
using namespace std;
#define MaxInt 32767
#define MVNum 100
bool visited[MVNum];
typedef struct
{
	char vexs[MVNum];
	int arcs[MVNum][MVNum];
	int vexnum, arcnum;
}AMGraph;
typedef struct ArcNode
{
	int adjvex;
	struct ArcNode *nextarc;
	//OtherInfo info;
}ArcNode;
typedef struct VNode
{
	int data;
	ArcNode *firstarc;
}VNode, AdjList[MVNum];
typedef struct
{
	AdjList vertices;
	int vexnum, arcnum;
}ALGraph;

int LocateVex(AMGraph &G, char v)
{
	int n;
	for (int i = 0; i<G.vexnum; i++)
	if (G.vexs[i] == v)
		n = i;
	return n;
}
int LocateVex(ALGraph &G, int v)
{
	int n = 0;
	for (int i = 0; i<G.vexnum; i++)
	if (G.vertices[i].data == v)
		n = i;
	return n;
}
//邻接矩阵创建无向图和有向图
int CreateWXT(AMGraph &G)
{
	char v1, v2;
	int w, i, j;
	cout<<"无向图邻接矩阵的建立"<<endl; 
	cout << "请输入顶点数和边数:";
	cin >> G.vexnum;
	cin >> G.arcnum;
	for (i = 0; i<G.vexnum; i++)
	{
		cout << "请输入顶点V" << (i + 1) << "的序号:";
		cin >> G.vexs[i];
	}
	for (i = 0; i<G.vexnum; i++)
	for (j = 0; j<G.vexnum; j++)
		G.arcs[i][j] = 0;
	for (int k = 0; k<G.arcnum; k++)
	{
		cout << "请输入两点之间的权值:例如1 2 10   ";
		cin >> v1;
		cin >> v2;
		cin >> w;
		i = LocateVex(G, v1); j = LocateVex(G, v2);
		G.arcs[i][j] = w;
		G.arcs[j][i] = G.arcs[i][j];
	}
	cout << "无向图的邻接矩阵为:" << endl;
	for (i = 0; i<G.vexnum; i++)
	{
		for (j = 0; j<G.vexnum; j++)
			cout << G.arcs[i][j] << "\t";
		cout << endl;
	}
	return 1;
}
int CreateYXT(AMGraph &G)
{
	char v1, v2;
	int w, i, j;
	cout << "有向图邻接矩阵的建立:"<<endl;
	cout << "请输入顶点数和边数:";
	cin >> G.vexnum;
	cin >> G.arcnum;
	for (i = 0; i<G.vexnum; i++)
	{
		cout << "请输入顶点V" << (i + 1) << "的序号:";;
		cin >> G.vexs[i];
	}
	for (i = 0; i<G.vexnum; i++)
	for (j = 0; j<G.vexnum; j++)
		G.arcs[i][j] = MaxInt;
	for (int k = 0; k<G.arcnum; k++)
	{
		cout << "请输入两个顶点值以及两点之间的权值:";
		cin >> v1;
		cin >> v2;
		cin >> w;
		i = LocateVex(G, v1); j = LocateVex(G, v2);
		G.arcs[i][j] = w;
	}
	cout << "有向图的邻接矩阵为:" << endl;
	for (i = 0; i<G.vexnum; i++)
	{
		for (j = 0; j<G.vexnum; j++)
		{
			if (G.arcs[i][j] != MaxInt)
				cout << G.arcs[i][j] << "\t";
			else
				cout << "∞" << "\t";
		}
		cout << endl;
	}
	return 1;
}

int main()
{
	AMGraph G1, G2;
	CreateWXT(G1);
	CreateYXT(G2);
}

  

posted @ 2020-11-27 22:47  奇怪的软工人  阅读(93)  评论(0编辑  收藏  举报