c++邻接矩阵的创建

来源:互联网 发布:application.js下载 编辑:程序博客网 时间:2024/06/04 22:46
#include<iostream>#include<string>#include<string.h>#include<iomanip>typedef char array[4];typedef int vr;#define INF 10000#define max 50  //最大五十的顶点数using namespace std;typedef struct{vr adj; //邻接矩阵两点间的值}arcnode,mat[max][max];typedef struct{array vex[max];//储存顶点  字符型的数组mat arc;  //二维的邻接矩阵int arraynum,arcnum;//顶点数 边的数}mgraph;int locate(mgraph n,array c){int i;for(i=0;i<n.arraynum;i++)if(strcmp(n.vex[i],c)==0)return i;return -1;}void creatgraph(mgraph *n)  //指针  创建{int i,j,k,len,w;char s[max];array v1,v2;cout<<"请输入有向网的顶点数 边数 "<<endl;cin>>(*n).arraynum>>(*n).arcnum;//输入顶点数和边数cout<<"请输入"<<n->arraynum<<"个顶点的值"<<endl;for(i=0;i<n->arraynum;i++)cin>>n->vex[i];for(i=0;i<n->arraynum;i++)for(j=0;j<n->arraynum;j++)n->arc[i][j].adj=INF;//初始化邻接矩阵cout<<"请输入"<<n->arcnum<<"条弧的弧头 弧尾 权值"<<endl;for(k=0;k<n->arcnum;k++){cin>>v1>>v2>>w;i=locate(*n,v1);//指针的j=locate(*n,v2);n->arc[i][j].adj=w;//存值}}void displaygraph(mgraph n){int i,j;cout<<n.arraynum<<"个顶点"<<n.arcnum<<"条弧"<<endl;cout<<"顶点依次是:"<<endl;for(i=0;i<n.arraynum;i++)cout<<n.vex[i]<<" ";cout<<endl;cout<<"序号i=:";for(i=0;i<n.arraynum;i++)cout<<setw(8)<<i;cout<<endl;for(i=0;i<n.arraynum;i++){cout<<setw(8)<<i;for(j=0;j<n.arraynum;j++)cout<<setw(8)<<n.arc[i][j].adj;cout<<endl;}}int main(){mgraph n;    cout<<"请你创建一个网"<<endl;    creatgraph(&n);cout<<"输出网的顶点和弧"<<endl;displaygraph(n);//cout<<"销毁网"<<endl;//destroygraph(&n);}