-
个人简介
在小小的OJ里面WA呀WA呀WA, 种暴力的种子开TLE的花~ 在大大的OJ里面WA呀WA呀WA, 种递归的种子开RE的花~ 在超级大的OJ里面WA呀WA呀WA, 开超级大的数组结MLE的花~
被撅力(悲
//迷宫生成器 #include <cstdio> #include <windows.h> #include <cstdlib> #include <ctime> #include <string> #include <vector> #include <algorithm> #define KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0) using namespace std; bool GetKeyDown(char a){ if(KEY_DOWN(a)) return true; else return false; } void MoveCursor(short x,short y){ HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); COORD position = {x, y}; SetConsoleCursorPosition(hConsole, position); } void SetTextColor(int red,int green,int blue){ int colorIndex = 16 + red / 51 * 36 + green / 51 * 6 + blue / 51; printf("\033[38;5;%dm",colorIndex); } void Print(string str,int red=255,int green=255,int blue=255,short CursorX=-1,short CursorY=-1,int dur=0){ SetTextColor(red,green,blue); if(CursorX!=-1 && CursorY!=-1) MoveCursor(CursorX,CursorY); for(int i=0;i<str.length();i++){ printf("%c",str[i]); Sleep(dur); } SetTextColor(255,255,255); } string To_string(int n){ string res=""; while(n){ res=char(n%10+'0')+res; n/=10; } if(res=="") res="0"; return res; } struct Room{ bool u=1,d=1,l=1,r=1; int x,y; void display(){ if(u) Print("_",255,255,255,x,y-1); if(d) Print("_",255,255,255,x,y); if(l) Print("|",255,255,255,x-1,y); if(r) Print("|",255,255,255,x+1,y); } } rooms[505][505]; bool vis[505][505]; int dx[]={0,1,0,-1}; int dy[]={-1,0,1,0}; int n; void dfs(int x, int y) { vis[x][y] = true; // 随机打乱方向顺序 vector<int> directions = {0, 1, 2, 3}; random_shuffle(directions.begin(), directions.end()); // 对四个方向进行遍历 for (int i = 0; i < 4; i++) { int newX = x + dx[directions[i]]; int newY = y + dy[directions[i]]; // 判断新位置是否在迷宫范围内 if (newX >= 1 && newX <= n && newY >= 1 && newY <= n && !vis[newX][newY]) { // 更新当前房间和下一个房间之间的墙壁信息 if (directions[i] == 0) { rooms[newX][newY].d = 0; rooms[x][y].u = 0; } else if (directions[i] == 1) { rooms[newX][newY].l = 0; rooms[x][y].r = 0; } else if (directions[i] == 2) { rooms[newX][newY].u = 0; rooms[x][y].d = 0; } else if (directions[i] == 3) { rooms[newX][newY].r = 0; rooms[x][y].l = 0; } dfs(newX, newY); } } } int main(){ scanf("%d",&n); srand(time(0)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) rooms[i][j].x=i*2,rooms[i][j].y=j; dfs(1,1); rooms[1][1].u = 0; // 入口 rooms[n][n].d = 0; // 出口 for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) rooms[i][j].display(); printf("\n"); } return 0; }
-
最近活动