[我为标题道歉,我刚刚指出了我在这个难题上遇到的问题。
根据遇到的星号数量,我正在制作一个行程最短的路径查找方法。
游戏规则很简单,从A到B遍历,但我只能在一条直线上移动,并且不能停止向那个方向移动,直到你击中一个星号(或B),好像它们在滑过每零。
例如,照片显示从A到B的最短路径,其中23是行进的总距离。 ] 1
出现在我脑海中的第一个想法是制作一个邻接矩阵,最初我在这里有我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main()
{
FILE *hehehe = fopen("input.txt","r");
//==========================ADJACENCY MATRIX INITIALIZATION=======================================//
int row, column, i, j;
fscanf(hehehe,"%d",&row);
fscanf(hehehe,"%d",&column);
char c;
c = fgetc(hehehe);
int matrix[row][column];
c = fgetc(hehehe);
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
if (c == '*'){
matrix[i][j] = 1;
c = fgetc(hehehe);
}
else if (c == 'A')
{
matrix[i][j] = 2;
c = fgetc(hehehe);
}
else if (c == 'B')
{
matrix[i][j] = 3;
c = fgetc(hehehe);
}
else{
matrix[i][j] = 0;
c = fgetc(hehehe);
}
if (c == '\n'){c = fgetc(hehehe);}
}
}
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
//if (matrix[i][j] == 1) printf("*");
//else printf(" ");
printf("%d ",matrix[i][j]);
}
printf("\n");
}
fclose(hehehe);
}
对于继续在照片中的每条直线上制作边缘的任何想法或建议都非常受欢迎。感谢您提前提供任何帮助。
答案 0 :(得分:0)
在这种情况下,我认为矩阵过度了。因为滑动时无法移动,所以只需要有向图。
制作算法时需要注意以下几点:
由于您的搜索空间看起来不那么大,我还没有完全优化算法。这就是我提到检查顶点和边缘是否已经添加的原因。优化这些是可能的,如果您需要,我可以提供帮助,但if语句的成本不足以保证过早优化。因为您的搜索空间易于简化,所以广度优先和Dijkstra算法绝对完美;他们找到了最短的路径,而且他们的性能成本远不及将它们放在2D网格上那么高。
如果您不确定如何制作数据结构,请按照我的方式进行处理。
1。 图表结构
Node
- Parent // a link to the previous node
// trace the links back to construct a path
- Depth // last node's depth + 1
- Vertex // the vertex hit by the pathfinder
Path
- Nodes // while parent is not null
// add a node to this list
// then read it backward
2。 探路者结构
{{1}}