int i= 0 在循环体外,首次循环结束后输出 ++i 是 1,然后输出 i 是0??
本帖最后由 ing 于 2020-1-18 20:18 编辑这个 i 的值的输出??
```
#include<stdarg.h>
#include<malloc.h>
#include<stdio.h>
//顶点的最大个数
#define MAX_VERTEX_NUM 40
//存储弧或者边额外信息的指针变量类型
#define InfoType char
//图中顶点的数据类型
#define VertexType int
typedef enum
{
//枚举图的 4 种类型
DG,DN,UDG,UDN
}GraphKind;
//存储各顶点之间的关系
typedef struct
{
//对于无权图,用 1 或 0 表示是否相邻;对于带权图,直接为权值
int adj;
//弧或边额外含有的信息指针
InfoType * info;
}ArcCell,AdjMatrix;
//二维矩阵
typedef struct
{
//存储图中顶点数据
VertexType vertex;
//二维数组,记录顶点之间的关系
AdjMatrix arcs;
//记录图的顶点数和弧(边)数
int vertexNum,arcNum;
//记录图的种类
GraphKind kind;
}MGraph;
//找到顶点本身数据,判断出顶点在二维数组中的位置
int locateVertex(MGraph * g,VertexType v)
{
int i = 0;
for (; i < g->vertexNum; ++i)
{
if (g->vertex == v)break;
}
printf("---------i:%d \n",i);
if (i > g->vertexNum)
{
printf("no such vertex.\n");
return -1;
}
return i;
}
//构造有向网,和有向图不同的是二阶矩阵中存储的是权值
void createUDG(MGraph * g)
{
printf("输入含有的顶点数和弧的个数 \n");
scanf("%d,%d",&(g->vertexNum),&(g->arcNum));
for (int i = 0; i < g->vertexNum; ++i) {
printf("依次输入顶点本身的数据 \n");
scanf("%d",&(g->vertex));
}
for (int j = 0; j < g->vertexNum; ++j) {
for (int k = 0; k < g->vertexNum; ++k) {
g->arcs.adj = 0;
g->arcs.info = NULL;
}
}
for (int k = 0; k < g->arcNum; ++k) {
int v1,v2,weight;
weight = -1;
printf("输入弧头、弧尾和权值 \n");
scanf("%d,%d,%d",&v1,&v2,&weight);
int h = locateVertex(g,v1);
int t = locateVertex(g,v2);
if (h == -1 || t == -1)
{
printf("no this vertex\n");
return;
}
g->arcs.adj = weight;
}
}
void createGraph(MGraph * g)
{
printf("请输入图的类型 \n");
printf("0 创建有向图(DG)\t"
"1 创建无向图(DN)\t"
"2 创建有向网(UDG)\t"
"2 创建无向网(UDN) \n");
scanf("%d",&(g->kind));
switch(g->kind) {
case DG:
return createDG(g);
break;
case DN:
return createDN(g);
break;
case UDG:
return createUDG(g);
break;
case UDN:
return createUDN(g);
break;
default:
break;
}
}
void printGraph(MGraph * g)
{
for (int i = 0; i < g->vertexNum; ++i) {
for (int j = 0; j < g->vertexNum; ++j) {
printf("%d",g->arcs.adj);
}
printf("\n");
}
}
int main()
{
MGraph g;
createGraph(&g);
printGraph(&g);
return 0;
}
```
请输入图的类型
0 创建有向图(DG) 1 创建无向图(DN) 2 创建有向网(UDG) 3 创建无向网(UDN)
2
输入含有的顶点数和弧的个数
6,10
依次输入顶点本身的数据
1
依次输入顶点本身的数据
2
依次输入顶点本身的数据
3
依次输入顶点本身的数据
4
依次输入顶点本身的数据
5
依次输入顶点本身的数据
6
输入弧头、弧尾和权值
2,1,5
---------i:1
---------i:0
输入弧头、弧尾和权值
3,2,4
---------i:2
---------i:1
输入弧头、弧尾和权值
1,3,8
---------i:0
---------i:2
输入弧头、弧尾和权值
4,1,7
---------i:3
---------i:0
输入弧头、弧尾和权值
3,4,5
---------i:2
---------i:3
输入弧头、弧尾和权值
6,3,9
---------i:5
---------i:2
输入弧头、弧尾和权值
1,6,3
---------i:0
---------i:5
输入弧头、弧尾和权值
6,4,6
---------i:5
---------i:3
输入弧头、弧尾和权值
5,6,1
---------i:4
---------i:5
输入弧头、弧尾和权值
4,5,5
---------i:3
---------i:4
050700
004000
800009
005006
000500
300010 for的参数呢 需要看下这个函数咋调用的
页:
[1]