这是暑假的大作业(为了提前放假,把暑假后所谓“小学期”的课放在期末考试前的周末上!!!还是从早上八点上到下午五点!!!很生气,所以做的也比较粗糙。
使用方法:
1.安装 VisualStdioCommunity
2.安装 EasyX,下载后,将其安装到 VS2022 中。
3.在 VS2022 中新建一个项目,把下面代码复制进去,就可以跑啦!
#include <conio.h>
#include <graphics.h>
#include <windows.h>
// save maze
// 0 --> barrier
// 1 --> access
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() {
// setup tangle border
// leftop(50.50) rightbottom(450,450)
rectangle(50, 50, 450, 450);
// draw table
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() {
// add description
RECT s = { 0, 0, 150, 80 };
drawtext(_T("Start"), &s, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// set start == left top
solidrectangle(50, 50, 100, 100);
// add description
RECT e = { 0, 0, 850, 920 };
drawtext(_T("End"), &e, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// set end
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) {
// SUCCESS
RECT s = { 100, 100, 250, 250 };
drawtext(_T("YOU WIN!"), &s, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
Sleep(1000);
exit(0);
}
// visited and draw
for (int i = 0; i < 4; i++) {
int x = sx + dx[i], y = sy + dy[i];
// if out of maze or visited or barrier --> continue
if (x < 0 || x > 7 || y < 0 || y > 7) continue;
if (visited[x][y] || !maze[x][y]) continue;
// else next
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() {
// init graph 500 x 500
initgraph(500, 500);
drawTable();
drawStartAndEnd();
drawBarrier();
memset(visited, false, sizeof visited);
setfillcolor(GREEN);
dfs(0, 0);
_getch();
closegraph();
return 0;
}
其实跑起来是有bug的,visited由bool改为int,再在下方对visited=true改为++,再对每一个visited换一个颜色说不定就好了,不过我太懒了!