有向图邻接矩阵、无向图邻接矩阵
#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);
}