问题描述
晚上,我想误解了 bfs 在迷宫求解器中的工作原理。我试图找出源自我的入队函数的这个错误。我是否错误地分配了数组?
这可能是我的迷宫求解器的设计缺陷。我是否正在访问未分配的可能块?
我也发现 prev[] 有问题。我相信我需要重新设计它,因为 C90 提示我警告。
struct queue_t *queue_create(int size)
{
struct queue_t *queue = malloc(sizeof(struct queue_t));
queue->array = malloc(sizeof(struct coordinate_t) * size + 1);
queue->capacity = size;
queue->size = size;
queue->array[0].coord_row = 0;
queue->array[0].coord_col = 0;
queue->array[queue->capacity].coord_row = 1;
queue->array[queue->capacity].coord_col = 1;
return queue;
}
void enqueue(struct queue_t *queue,struct coordinate_t coordinate)
{
if (!queue_full(queue)) {
queue->array[queue->array[queue->capacity].coord_row] = coordinate;
queue->array[queue->capacity].coord_row = (queue->array[queue->capacity].coord_row + 1) % queue->capacity;
if (queue_empty(queue)) {
queue->array[0].coord_row = 1;
}
} else {
printf("\nQueue is full");
}
}
int main(int argc,char *argv[])
{
if (argc == 2) {
int row_map_size;
int col_map_size;
int start_row;
int start_col;
int goal_row;
int goal_col;
map_input(argv,&row_map_size,&col_map_size,&start_row,&start_col,&goal_row,&goal_col);
FILE *fp = fopen(argv[1],"r");
rewind(fp);
if (!fp) {
printf("\nFILE ERROR: Unable to open %s",argv[1]);
printf("\nExiting...");
exit(EXIT_FAILURE);
}
struct graph_t *graph = graph_create(row_map_size,col_map_size);
graph->start.coord_row = start_row;
graph->start.coord_col = start_col;
graph->goal.coord_row = goal_row;
graph->goal.coord_col = goal_col;
char buffer[MAX_BUFFER];
for (int i = 0; i < row_map_size; ++i) {
fgets(buffer,MAX_BUFFER,fp);
buffer[strlen(buffer) - 1] = '\0';
strcpy(graph->adj_nodes[i],buffer);
}
int size = graph->rows * graph->columns;
struct coordinate_t prev[size];
graph_print(graph);
int bfs = graph_bfs_path(graph,prev);
if (bfs != -1) {
struct coordinate_t goal = graph->goal;
int prev_idx = goal.coord_row * graph->columns +
goal.coord_col;
printf("\nprev_idx: %d",prev_idx);
while (prev[prev_idx].coord_row !=
graph->start.coord_row
|| prev[prev_idx].coord_col !=
graph->start.coord_col) {
prev_idx = goal.coord_row * graph->columns +
goal.coord_col;
goal = prev[prev_idx];
if (graph->adj_nodes[goal.coord_row]
[goal.coord_col] == ' ') {
graph->adj_nodes[goal.coord_row]
[goal.coord_col] = '.';
}
}
graph_print(graph);
fclose(fp);
free_graph(graph);
} else {
printf("\nFILE ERROR: Can't find a path");
graph_print(graph);
free_graph(graph);
}
} else {
printf("\nUSAGE ERROR: %s [filename].txt",argv[0]);
printf("\nExiting...");
exit(EXIT_FAILURE);
}
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)