1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <conio.h> #include <graphics.h> #include <windows.h>
bool maze[8][8] = { 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1 };
void drawTable() { rectangle(50, 50, 450, 450); for (int i = 1; i < 9; i++) line(50, 50 * (i + 1), 450, 50 * (i + 1)); for (int i = 1; i < 9; i++) line(50 * (i + 1), 50, 50 * (i + 1), 450); }
void drawStartAndEnd() { RECT s = { 0, 0, 150, 80 }; drawtext(_T("Start"), &s, DT_CENTER | DT_VCENTER | DT_SINGLELINE); solidrectangle(50, 50, 100, 100); RECT e = { 0, 0, 850, 920 }; drawtext(_T("End"), &e, DT_CENTER | DT_VCENTER | DT_SINGLELINE); solidrectangle(400, 400, 450, 450); }
void drawBarrier() { setfillcolor(RED); for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) { if (!maze[i][j]) { solidrectangle(50 * (j + 1), 50 * (i + 1), 50 * (j + 2), 50 * (i + 2)); Sleep(30); } } }
bool visited[8][8]; int dx[4] = { 0, 1, 0, -1 }, dy[4] = { 1, 0, -1, 0 }; void dfs(int sx, int sy) { if (sx == 7 && sy == 7) { RECT s = { 100, 100, 250, 250 }; drawtext(_T("YOU WIN!"), &s, DT_CENTER | DT_VCENTER | DT_SINGLELINE); Sleep(1000); exit(0); }
for (int i = 0; i < 4; i++) { int x = sx + dx[i], y = sy + dy[i]; if (x < 0 || x > 7 || y < 0 || y > 7) continue; if (visited[x][y] || !maze[x][y]) continue; visited[sx][sy] = true; solidrectangle(50 * (sy + 1), 50 * (sx + 1), 50 * (sy + 2), 50 * (sx + 2)); Sleep(500); dfs(x, y); visited[sx][sy] = false; clearrectangle(50 * (sy + 1), 50 * (sx + 1), 50 * (sy + 2), 50 * (sx + 2)); } }
int main() { initgraph(500, 500);
drawTable(); drawStartAndEnd(); drawBarrier();
memset(visited, false, sizeof visited); setfillcolor(GREEN); dfs(0, 0);
_getch(); closegraph(); return 0; }
|