#include #include #include #include #include #ifdef _win32
#include #endif
#ifndef strict
#define strict 1
#endif
/* 巨集dynamic-是否開啟動態規劃 */
#define dynamic 1
#define disopti1 1
/* 巨集disprocedure-是否動態演示搜尋過程 */
#define disprocedure 1
/* 巨集fullnull-是否全空 */
#define fullnull1 1
/* 巨集_random_-是否使用隨機資料 */
#define _random_ 1
/* 巨集waitpresskey-等待按鍵 */
#define waitpresskey1 1
#define mousemaze1 1
#define mousemaze2 1
#ifdef mousemaze1
#define xsize1 75
#define ysize1 22
#define xsize xsize1
#define ysize ysize1
#ifdef _win32
void gotoxy(int x, int y);
#else
void cursor(unsigned int mode);
#endif
void visit(int x, int y);
void disresult(void);
char maze[ysize1][xsize1] =
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, };
#else
#ifdef mousemaze2
#define xsize 20
#define ysize 15
char maze[ysize][xsize] =
, ,
, ,
, ,
, ,
, ,
, ,
, ,
};#else
#define xsize 9
#define ysize 9
char maze[ysize][xsize] =
, ,
, ,
, ,
, ,
};#endif
#endif
const int top = 2;
const int left = 3;
int startx = 1, starty = 1; /* 入口 */
int endx = xsize - 2, endy = ysize - 2; /* 出口 */
int success = 0;
#ifdef dynamic
int routearray[ysize][xsize];
#endif
int minlength = rand_max;
int routelength = 0;
int minroutes[xsize * ysize][2];
int routes[xsize * ysize][2];
#ifdef _win32
#define wallcode 'x'
handle hout;
void gotoxy(int x, int y)
#else
#define wallcode 219
void cursor(unsigned int mode)
else
r.x.cx = 0x2020;
int86(0x10, &r, &r);
}#endif
int main(void)
maze[i][xsize - 1] = 2;
gotoxy(xsize - 1 + left, i + top);
printf("%c", wallcode);
} maze[starty][startx] = 0;
maze[endy][endx] = 0;
gotoxy(startx + left, starty + top);
printf("s");
gotoxy(endx + left, endy + top);
printf("e");
/* 多次搜尋標記死角,直到找不到為止 */
k = 1;
while(k)
else if (maze[i][j + 1] != 0 && maze[i + 1][j] != 0 && maze[i][j - 1] != 0)
else if (maze[i + 1][j] != 0 && maze[i][j - 1] != 0 && maze[i - 1][j] != 0)
else if (maze[i][j - 1] != 0 && maze[i - 1][j] != 0 && maze[i][j + 1] != 0)}}
}} getch();
visit(startx, starty);
if (success)
disresult();
getch();
#ifdef _win32
closehandle(hout);
#endif
}void visit(int x, int y)
else
#endif
if (y == endy && x == endx)
if (routelength < minlength)
}#ifdef disprocedure
gotoxy(x + left, y + top);
printf(" ");
#endif
#ifdef waitpresskey
getch();
#endif
maze[y][x] = 0;
routelength--;
return;
} if (maze[y + 1][x] == 0)
visit(x, y + 1);
if (maze[y][x + 1] == 0)
visit(x + 1, y);
if (maze[y - 1][x] == 0)
visit(x, y - 1);
if (maze[y][x - 1] == 0)
visit(x - 1, y);
#ifdef disprocedure
gotoxy(x + left, y + top);
printf(" ");
#endif
maze[y][x] = 0;
routelength--;
}void disresult(void)
} #ifndef _win32
textcolor(7);
#endif
for (i = 0; i < minlength; i++)
gotoxy(1, 1);
printf("%d", minlength);
}
尋找迷宮中的最短路徑
給定乙個n m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。最初,有乙個人位於左上角 1,1 處,已知該人每次可以向上 下 左 右任意乙個方向移動乙個位置。請問,該人從左上角移動至右下角 n,m 處,至少需要移動多少次。資料保證 1,1 處和 n,...
走迷宮記錄所走最短路徑的步數(最容易理解的)
include define n 10005 struct ak a n int n,m 地圖大小n m int x,y,p,q 起始位置 x,y 和終止位置 p,q int tx,ty 當前所在位置 tx,ty int map n n 地圖的形狀 int flag n n 標記地圖 int nex...
用動態規劃演算法求解最短路線問題
問題如下 設有乙個旅行者從a點出發,途中要經過b,c,d等處,最後到達e,從a到e有很多條路線可走,各個點的距離如下,問旅行者應該選擇哪一條,是使a到e路線最短。求解演算法 public class dp public void setmatrix int matrix 任意兩點之間的距離,前提是p...