矩阵法存储图
用二维数组来标记点和对应的权值
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char VertexType[4];
typedef int VRType;
#define MAX 10
typedef struct graph
{
int arcnum;//边数
int vexnum;//权数
VertexType vextex[MAX];//二维数组vertex[MAX][4]
VRType matrix[MAX][MAX];//所有所在边的权值
}GRAPH,*LPGRAPH;
//搜索定位
int serchPos(LPGRAPH G,VertexType x)
{
int i;
for(i=0;i<G->vexnum;i++)
{
if(strcmp(G->vextex[i],x)==0)
return i;
}
return -1;
}
LPGRAPH createGraph()
{
LPGRAPH G=(LPGRAPH)malloc(sizeof(GRAPH));
printf("请输入边数和顶点数:");
scanf("%d%d",&G->arcnum,&G->vexnum);
printf("请输入%d 个顶点\n",G->vexnum);
int i;
for(i=0;i<G->vexnum;i++)
{
//每一行都是一个字符串
scanf("%s",G->vextex[i]);//
}
memset(G->matrix,0,sizeof(int)*100);
//两点确定一条边
printf("请输入%d 条边的信息\n",G->arcnum);
VertexType v1,v2;
VRType vrt;
for(i=0;i<G->arcnum;i++)
{
scanf("%s%s%d",v1,v2,&vrt);
//在权值数组中去定位
int posV1 =serchPos(G,v1);
int posV2 =serchPos(G,v2);
G->matrix[posV1][posV2]=vrt;
}
return G;
}
void printfGraph(LPGRAPH G)
{
int i,j;
for(i=0;i<G->vexnum;i++)
{
printf("\t%s",G->vextex[i]);
}
printf("\n");
for(i=0;i<G->vexnum;i++)
{
printf("%s\t",G->vextex[i]);
for(j=0;j<G->vexnum;j++ )
{
printf("%d\t",G->matrix[i][j]);
}
printf("\n");
}
}
int main()
{
LPGRAPH G= createGraph();
printfGraph(G);
system("pause");
return 0;
}
这个相比二叉搜索树还是比较容易理解的,今天偷懒了一会儿,打了一晚上的斗地主,哎 ,今晚没有多余时间做过多的解释,今天就这样吧
10000小时计划
44h