前言:
现时咱们对“c语言迷宫问题实验报告”可能比较重视,同学们都想要学习一些“c语言迷宫问题实验报告”的相关知识。那么小编也在网摘上收集了一些有关“c语言迷宫问题实验报告””的相关知识,希望大家能喜欢,我们一起来学习一下吧!#include <stdio.h>#include <stdlib.h> /* malloc(),free() */#include <memory.h> /* memory.h */typedef struct Trace{ int row; int col;}Trace;/* 输出入口到出口的路径paths */void outputPath(int *maze, int rows, int cols, int step, Trace paths[]){ int i, j; for(i=0; i<step; i++) { maze[paths[i].row*cols+paths[i].col] = 6; } for(i=0; i<rows; i++) { for(j=0; j<cols; j++) { printf("%d", maze[i*cols+j]); } printf("\n"); } for(i=0; i<step; i++) { maze[paths[i].row*cols+paths[i].col] = 0; }}/* 内部函数:在迷宫maze[rows][cols]中的位置(row,col)寻找到出口的路径 */int findPath_(int *maze, int rows, int cols, int *flag, int row, int col, int step, Trace paths[]){ static int next_row_col[4][2] = { {-1, 0}, /* 上 */ {1, 0}, /* 下 */ {0, -1}, /* 左 */ {0, 1}, /* 右 */ }; int i, next_row, next_col, index; static int n=0; /* 统计路径数量 */ if ((row == rows-1) && (col == cols-1)) { /* 到达出口 */ printf("\n[%dth]:\n", ++n); paths[step].row = row; paths[step].col = col; outputPath(maze, rows, cols, step+1, paths); return 1; } /* 迷宫越界判断 */ if (row<0 || col<0 || row>=rows || col>=cols) { return 0; } /* 到此一游 */ flag[row * cols + col] = 1; paths[step].row = row; paths[step].col = col; /* 探索上下左右4个方向 */ for(i=0; i<4; i++) { next_row = row + next_row_col[i][0]; next_col = col + next_row_col[i][1]; index = next_row * cols + next_col; /* 试探的位置 */ if ((maze[index] == 0)&&(flag[index] == 0)) { /* 迷宫可走,并且未走过 */ findPath_(maze, rows, cols, flag, next_row, next_col, step+1, paths); } } flag[row * cols + col] = 0; /* 清除痕迹!!! */ return n;}/* 在迷宫maze[rows][cols]中由入口(0,0)寻找到出口的路径 */int findPath(int *maze, int rows, int cols){ int *flag; /* 到此一游的标志数组 */ Trace *paths; /* 入口到出口的路径数组 */ flag = malloc(sizeof(int)*rows*cols); paths = malloc(sizeof(Trace)*rows*cols); memset(flag, 0, sizeof(int)*rows*cols); return findPath_(maze, rows, cols, flag, 0, 0, 0, paths);}int main(){ int maze[8][10] = { {0,0,0,1,0,0,0,0,0,0}, {0,1,0,0,1,0,0,1,1,0}, {0,1,1,0,0,1,0,1,0,0}, {0,0,0,1,0,0,0,1,0,1}, {0,1,0,0,0,1,1,1,0,0}, {0,0,1,0,1,0,0,0,1,0}, {1,0,1,0,0,0,1,0,1,0}, {0,0,0,0,1,0,1,0,0,0}, }; findPath(maze[0], 8, 10); return 0;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言迷宫问题实验报告 #c语言程序迷宫