繁体   English   中英

如何使用用户的输入C程序创建一个外部循环以读取两个单独的迷宫

[英]How do you create an outer loop to read two separate mazes using the user's input C program

因此,我们应该从用户读取输入文件。 输入文件包含以下内容:

  • 第一行:文件中的迷宫数
  • 第二行:第一个数字是节点数,第二个数字是节点数。
  • 第一行:将有与第二行具有相同格式的行。 这些行告诉您已经到达下一个迷宫。 有n对这样的数字对,其中n是文件第一行中指示的数字。
  • 其余的行:其余的行是三个数字的集合,包含源,边数,目标和边/路径成本。

问题是,我的程序只读取程序的前半部分。 当涉及下一个“迷宫”时,它停止。

如何一次性阅读两个迷宫? 请帮助。 这是输入文件:

2  
16 15   
0 1 1   
1 5 1   
5 6 1   
6 7 1   
7 11 1   
11 10 1   
10 14 1   
14 13 1   
13 9 1   
14 15 1   
1 2 1   
2 3 1   
0 4 1   
4 8 1   
8 12 1   
16 15   
0 1 1   
1 2 1   
2 6 1   
6 7 1   
7 11 1   
11 15 1   
15 14 1   
14 13 1   
13 9 1   
9 5 1   
9 10 1   
2 3 1   
0 4 1   
4 8 1   
8 12 1   

这是我的程序:

fh = fopen("maze_test_small", "r");
chk_null_ptr(fh);

fscanf(fh, "%d",&nlines);
fscanf(fh, "%d %d", &nnodes, &nedges);
adjlist = (edgelist_t**) calloc(nnodes + 1, sizeof(edgelist_t *));
chk_null_ptr(adjlist);

for(i = 0; i < nnodes; i++)
{
    adjlist[i] = (edgelist_t *) calloc(1, sizeof(edgelist_t));
    chk_null_ptr(adjlist[i]);
    adjlist[i][0].cost = 0;
}

while(nedges--)
{
    fscanf(fh, "%d %d %d", &na, &nb, &wt);
    adjlist[na] = (edgelist_t *) realloc(adjlist[na], (adjlist[na]   [0].cost + 2) * sizeof(edgelist_t));
    adjlist[nb] = (edgelist_t *) realloc(adjlist[nb], (adjlist[na][0].cost + 2) * sizeof(edgelist_t));
    chk_null_ptr(adjlist[na]);
    chk_null_ptr(adjlist[nb]);
    adjlist[na][adjlist[na][0].cost + 1].dest = nb;
    adjlist[nb][adjlist[nb][0].cost + 1].dest = na;
    adjlist[na][adjlist[na][0].cost + 1].cost = wt;
    adjlist[nb][adjlist[nb][0].cost + 1].cost = wt;
    adjlist[na][0].cost++;
    adjlist[nb][0].cost++;
}

您尚未将外部循环与nlines 这就是为什么它只读取一个迷宫。

您可以执行以下操作:

for(i = 0; i < nlines; i++){
    // your code.
}

如果您在其他任何地方都不需要nlines

while(nlines--){
    //your code
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM