标签:
周数 | 专业目标学习 | 专业学习时间 | 博客发表量 | 人文方面的学习 | 知识技能总结 |
14 | 数据结构与算法,HTML,计算机网络基础,高数 | 平均5小时/天 | 16 | 四级词汇,钢铁是怎样炼成的 | 这周数据结构学习了图,没有很好的理解,多敲几遍吧... |
#include "stdafx.h"
#include <stdio.h>
#define MaxInt 32767 //表示极大值,即∞
//DG表示有向图,AG表示无向图,WDG有向网 ,WAG无向网
typedef enum{ DG,AG,WDG,WAG} Graph;
#define MVNum 100 //最大顶点数
typedef char VexType; //假设顶点的数据类型为字符型
typedef int AdjType; //假设边的权值类型为整型
typedef struct{
Graph kind;
VexType vexs[MVNum]; //顶点表
AdjType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点个数和边个数
}AdjGraph;
//此函数输入图的邻接矩阵结构pg和某个顶点数据v,输出与其邻接顶点的信息
void PrintfGraph(AdjGraph *pg,VexType v){
int i,posi;
for(i=0;i<pg->vexnum;i++){ //判断此图是否有该顶点V
if(pg->vexs[i]==v)
break;
}
if(i==pg->vexnum)
{
printf("无此顶点%c数据\n",v);
return;;
}
posi=i;//有该顶点数据,保存此顶点存放在数组的位置posi
for(i=0;i<pg->vexnum;i++){
if(pg->arcs[i][posi]!=MaxInt){
printf("%c顶点到%c顶点的距离为%d ",pg->vexs[i],v,pg->arcs[i][posi]);
}
}
printf("\n");
for(i=0;i<pg->vexnum;i++){
if(pg->arcs[posi][i]!=MaxInt){
printf("%c顶点到%c顶点的距离为%d ",v,pg->vexs[i],pg->arcs[posi][i]);
}
}
printf("\n\n");
}
int main(int argc,char* argv[])
{
printf("学号3157102305,姓名:马靖姗\n");
AdjGraph ag;
ag.vexnum=6;
int i,j;
for(i=0;i<MVNum;i++)
{
ag.vexs[i]=0;
for(j=0;j<MVNum;j++)
{
ag.arcs[i][j]=MaxInt;
}
}
for(i=0;i<ag.vexnum;i++)
ag.vexs[i]=‘A‘+i;
int A=0,B=1,C=2,D=3,E=4,F=5;
ag.arcs[A][B]=3;ag.arcs[B][A]=3;
ag.arcs[A][C]=5;ag.arcs[C][A]=5;
ag.arcs[B][D]=4;ag.arcs[D][B]=4;
ag.arcs[D][F]=8;ag.arcs[F][D]=8;
ag.arcs[C][E]=2;ag.arcs[E][C]=2;
ag.arcs[E][F]=1;ag.arcs[F][E]=1;
AdjGraph ag2;
ag2.vexnum=6;
for(i=0;i<MVNum;i++)
{
ag2.vexs[i]=0;
for(j=0;j<MVNum;j++)
{
ag2.arcs[i][j]=MaxInt;
}
}
for(i=0;i<ag.vexnum;i++)
ag2.vexs[i]=‘A‘+i;
ag2.arcs[A][B]=3;ag2.arcs[A][C]=5;
ag2.arcs[B][D]=4;ag2.arcs[D][F]=8;
ag2.arcs[C][E]=2;ag2.arcs[E][F]=1;
ag2.arcs[A][F]=9;
char c[20];
while(true)
{
printf("输入顶点数据:");
scanf("%s",c);
if(c[0]==‘0‘) break;
printf("无向图\n");
PrintfGraph(&ag,c[0]);
printf("有向图\n");
PrintfGraph(&ag2,c[0]);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/mjs123/p/5554321.html