#include <iostream>
#include<stdio.h>
using namespace std;
#define FINITY 5000 //此处用5000代表最大
#define m 20 //最大顶点树
typedef char vertextype; //顶点值类型
typedef int edgetype; //权值类型
typedef struct
{
vertextype vexs[m]; //顶点值类型
edgetype edges[m][m]; //邻接矩阵
int n,e; //顶点总数 和 边树
}mgraph; //邻接矩阵表示的图类型
// 图的邻接矩阵创建算法
void createmgraph1(mgraph *g)
{
int i,j,k,w;
cout<<"\n输入图的顶点数:";
cin>>g->n;
cout<<"\n输入图的边数:";
cin>>g->e;
getchar(); //取消输入的换行符
cout<<"\n请输入顶点信息:";
for(i=0;i<g->n;i++)
{
char c;
cin>>c;
g->vexs[i]=c;
}
//初始化邻接矩阵
for(i=0;i<g->n;i++)
for(j=0;j<g->n;j++)
if(i==j)
g->edges[i][j]=0;
else
g->edges[i][j]=FINITY;
cout<<"\n输入边的信息:\n";
cout<<"\ni--->j 值为w.\n";
for(k=0;k<g->e;k++)
{
cin>>i; //? 怎么把输入格式转为 i----->j???
// cout<<"---->";
cin>>j;
cin>>w;
g->edges[i][j]=w;
g->edges[j][i]=w; //此处建立无向图
}
}
// 输出此无向图
void print(mgraph g)
{
cout<<"\n此无向图共有"<<g.n<<"个结点, "<<g.e<<"条边.\n";
cout<<"\n结点信息为:";
for(int i=0;i<g.n;i++)
cout<<g.vexs[i]<<" ";
cout<<"\n邻接矩阵图为:\n";
for(i=0;i<g.n;i++)
{
for(int j=0;j<g.n;j++)
cout<<g.edges[i][j]<<" ";
cout<<endl;
}
}
int main()
{
mgraph g;
createmgraph1(&g);
print(g);
}
评论