图的邻接矩阵构造,求教大神
本帖最后由 lastyearing 于 2013-03-19 09:58:36 编辑
/**
*
*通过用户交互产生一个有向图的邻接矩阵
*
**/
#include<stdio.h>
#include<stdlib.h>
#define MAX 20 //定义常量
struct vertex{ //顶点结构定义
int num; //顶点序号
char data; //顶点信息
};
typedef struct gragh{ //图结构定义
int n; //顶点数
int e; //边数
struct vertex vexs[MAX]; //顶点数组
int edges[MAX][MAX]; //边矩阵
}Gragh;
Gragh createmgragh() //交互式创建一个图的邻接矩阵
{
int i=0,j=0,k=0,w=0,n=0,e=0;
char b=NULL,t=NULL;
Gragh gra;
printf("请输入顶点数(n)和边数(e):"); //输入顶点数和边数
scanf("%d %d",&n,&e);
gra.n=n;
gra.e=e;
for(i=0;i<n;i++) //循环输入每个顶点的序号及信息
{
printf("第%d个顶点的信息:",i);
scanf("%c",&gra.vexs[i].data); //输入顶点信息
gra.vexs[i].num=i; //赋值顶点序号
}
for(i=0;i<n;i++) //每个边赋权值为0
{
for(j=0;j<n;j++)
gra.edges[i][j]=0;
}
for(k=0;k<e;k++) //输入边的信息
{
printf("第%d条边的信息:",k+1);
printf("起点:"); //输入起点
scanf("%d",&b);
printf("终点:"); //输入终点
scanf("%d",&t);
printf("权值:"); //输入权值
scanf("%d",&w);
i=0;
while(i<n&&gra.vexs[i].data!=b) //查找起点的序号
i++;
if(i>n)
{
printf("起点不存在!\n");
}
j=0;
while(j<n&&gra.vexs[j].data!=b) //查找终点的序号
j++;
if(j>n)
{
printf("终点不存在!\n");
}
gra.edges[i][j]=w; //给边赋权值
}
return gra;
}
void main() //主函数
{
Gragh gra;
gra=createmgragh();
}