吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1153|回复: 4
收起左侧

[求助] int i= 0 在循环体外,首次循环结束后输出 ++i 是 1,然后输出 i 是0??

[复制链接]
ing 发表于 2020-1-18 19:53
本帖最后由 ing 于 2020-1-18 20:18 编辑


这个 i 的值的输出??
捕获.PNG
捕获.PNG


#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[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

//二维矩阵
typedef struct
{
    //存储图中顶点数据
    VertexType vertex[MAX_VERTEX_NUM];
    //二维数组,记录顶点之间的关系
    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[i] == 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[i]));
    }
    for (int j = 0; j < g->vertexNum; ++j) {
        for (int k = 0; k < g->vertexNum; ++k) {
            g->arcs[j][k].adj = 0;
            g->arcs[j][k].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[t][h].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[i][j].adj);
        }
        printf("\n");
    }
}

int main()
{
    MGraph g;
    createGraph(&g);
    printGraph(&g);

    return 0;
}

[Asm] 纯文本查看 复制代码
请输入图的类型
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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

渣渣奶 发表于 2020-1-18 19:56
for的参数呢
头像被屏蔽
庞晓晓 发表于 2020-1-18 20:03
头像被屏蔽
阿狸主题曲 发表于 2020-1-18 20:07
iokeyz 发表于 2020-1-18 20:09
需要看下这个函数咋调用的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表