我正在使用广度优先搜索来制作迷宫求解器。请考虑文本文件中的以下数字列表
10 20
1 1
10 20
5 1
4 2
3 3
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
第一行表示迷宫(10x20)的大小,第二行表示起始位置坐标(1x1),第三行表示结束位置(10x20)。第三行之后的每一行代表迷宫中的一个块所在的坐标(也就是必须在它周围移动)。
这是特定电路板的样子:
**********************
*s........*..........*
*........*...........*
*..*....*............*
*.*....*.............*
**....*..............*
*....*...............*
*...*................*
*..*.................*
*....................*
*...................e*
**********************
我想做什么: 如果我的文本文件的大小或开始/结束坐标的坐标不可能,请忽略这些坐标并继续处理输入。
示例:
10 0 => Invalid: Maze sizes must be greater than 0
15 7 => Maze becomes size 15 x 7
10 20 => Invalid: column 20 is outside range from 1 to 7
5 1 => Starting position is at position 5, 1
24 2 => Invalid: row 24 is outside of range from 1 to 15
3 3 => Ending position is at position 3, 3
1 10 => Invalid: column 10 is outside range from 1 to 7
2 9 => Invalid: column 9 is outside range from 1 to 7
3 8 => Invalid: column 8 is outside range from 1 to 7
4 7
5 6
5 1 => Invalid: attempting to block starting position
6 5
7 4
8 3
我知道我应该使用一些fprintf或fscanf循环,直到文件结束。 有人能让我朝着正确的方向开始吗?
如果需要,我想打印文件中的所有坐标,并在行中进一步显示错误消息。
答案 0 :(得分:0)
问题是你试图询问如何阅读所有要点?如果是这样,您可以执行以下操作:
int n1, n2;
FILE * fp = fopen("myfile.txt", "r");
//...read first three lines and do what you need with them
//read rest of points
while( fscanf(fp, "%d %d", &n1, &n2) ) {
if (checkPoints(n1,n2)) // check points are valid
addPointsToBoard(n1,n2); // add to board
}
如果您正在询问如何实施checkPoints
之类的内容,我会说您没有提供足够的信息,说明您计划如何为有人提供帮助来实施代码
注意:这假设您有一个格式正确的输入文件。如果您担心无效输入,则需要进行健全性检查
编辑根据评论,这里有一种方法可以对矩阵大小输入进行健全性检查(第一行)
int valid_size = 0;
while(1) {
if ( fsanf(fp, "%d %d", &n1, &n2) )
valid_size = checkMatrixSizes(n1,n2);
else
exit(1); //never finding valid matrix size in file
if (valid_size)
break
}
上面的循环将一直循环,直到checkMatrixSizes
找到有效的大小(我还怀疑它会创建你的板,等等。上面是伪代码,远未完成)。您可以为第二个和第三个输入执行类似的循环。应该注意的是,这段代码只是忽略了任何无效的输入并继续前进,我认为这是你想要的行为基于你的问题。其他行为可能包括将输入调整为最接近的可接受值(即,如果列超出范围,则将列设置为最高可能值)。