• 个人简介

    在小小的OJ里面WA呀WA呀WA,
    
    种暴力的种子开TLE的花~
    
    在大大的OJ里面WA呀WA呀WA,
    
    种递归的种子开RE的花~
    
    在超级大的OJ里面WA呀WA呀WA,
    
    开超级大的数组结MLE的花~
    

    被撅力(悲

    image image

    //迷宫生成器 
    #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;
    }
    
    
  • 最近活动