#include<stdio.h>
#include<stdlib.h>
typedef char VertexData;
#define maxsize 20
typedef struct
{
VertexData vex[maxsize];//顶点表
int arc[maxsize][maxsize];//邻接矩阵
int n,e;//边数、顶点数
}AdjMatrix;
int locatevex(AdjMatrix g,VertexData v) //在图中查找顶点,存在返回顶点数组下标,否则返回-1
{
int i;
for(i=0;i<g.n;i++)if(g.vex[i]==v)return i;
return -1;
}
void print(AdjMatrix g)
{
int i,j;
printf("图的邻接矩阵表示:\n");
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
{
printf("%3d",g.arc[i][j]);
}
printf("\n");
}
}
void CreateDN(AdjMatrix *g) //创建有向图邻接矩阵
{
int i,j,k,weight;
VertexData v1,v2;
printf("请输入顶点数和边数:\n");
printf("顶点数n=");
scanf("%d",&g->n);
printf("边数 e=");
scanf("%d",&g->e);
printf("请输入图的顶点信息(连续输入无空格):\n");
getchar();
for(i=0;i<=g->n;i++)
scanf("%c",&g->vex[i]);
for(i=0;i<g->n;i++)
for(j=0;j<g->n;j++)
g->arc[i][j]=0; //初始化邻接矩阵
printf("请输入图的边的信息(起点、终点与权值):\n");
for(k=0;k<g->e;k++)
{
printf("请输入第%d条边的两端点和权值(连续输入无空格):",k+1);
scanf("%c%c%d",&v1,&v2,&weight);
fflush(stdin); //清空缓冲区(输入)
i=locatevex(*g,v1);
j=locatevex(*g,v2);
g->arc[i][j]=weight;//有向网有权矩阵对称
}
}
int main()
{
AdjMatrix g;
CreateDN(&g);
print(g);
printf("\n");
return 0;
}
| 日期 |
学习方法 |
学习时间 |
新增代码行 |
知识总结 |
| 星期一 |
看慕课视频 |
2h |
0 |
|
| 星期二 |
|
|
|
|
| 星期三 |
看慕课视频 |
2.5h |
0 |
|
| 星期四 |
看慕课视频 |
2h |
0 |
|
| 星期五 |
|
|
|
|
| 星期六 |
看慕课视频、做练习 |
4h |
70 |
|
| 星期日 |
做练习 |
2h |
110 |
|
| 总计 |
看慕课视频、做练习 |
12.5h |
180 |
|