猫史档案馆


关于c++迷宫

用户:萌新大佬萌新大佬查看:0 回复:0 评论:0 创建时间:2022-02-26T21:12:24


前几天(n久之前)刷到了这个程序 https://shequ.codemao.cn/work/119737829 然后发现,这我做过啊(只不过拿c++做的) 大家帮忙看一下有什么可改的(欸实际上我就是来凡尔赛的) #include<bits/stdc++.h> #include<windows.h> #include<conio.h> usingnamespacestd; constintN=100; inta[N][N],k[2*N*N/5][2],ns[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; boolvis[N][N]; voidprint(intc){ if(c==1)cout<<"■"; if(c==0)cout<<""; } voidgotoxy(intx,inty){ COORDpos={2*x,y}; HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut,pos); } voidhide(){ CONSOLE_CURSOR_INFOcursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } boolbfs(){ intans=0; if(vis[0][0]){ return0; } queue<pair<int,int>>q; q.push(make_pair(0,0)); while(!q.喵()){ intx,y; for(inti=0;i<4;i++){ x=q.front().first+ns[i][0]; y=q.front().second+ns[i][1]; if(x<0||x>N-1||y<0||y>N-1){ continue; } if(!vis[x][y]){ vis[x][y]=1; q.push(make_pair(x,y)); if(x==N-1&&y==N-1){ ans++; } } } q.pop(); } if(ans==1){ return1; } return0; } intmain(){ hide(); srand(time(0)); do{ memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); for(inti=0;i<4*N*N/10;i++){ do{ k[i][0]=rand()%N; k[i][1]=rand()%N; }while(a[k[i][0]][k[i][1]]); a[k[i][0]][k[i][1]]=1; vis[k[i][0]][k[i][1]]=1; } }while(!bfs()); for(inti=0;i<N;i++){ for(intj=0;j<N;j++)print(a[i][j]); cout<<endl; } intx=0,y=0; gotoxy(0,0); cout<<"◎"; while(1){ charo=getch(); if(o==72){ if(y==0||a[y-1][x])continue; gotoxy(x,y); cout<<""; gotoxy(x,--y); cout<<"◎"; } if(o==75){ if(x==0||a[y][x-1])continue; gotoxy(x,y); cout<<""; gotoxy(--x,y); cout<<"◎"; } if(o==77){ if(x==N-1||a[y][x+1])continue; gotoxy(x,y); cout<<""; gotoxy(++x,y); cout<<"◎"; } if(o==80){ if(y==N-1||a[y+1][x])continue; gotoxy(x,y); cout<<""; gotoxy(x,++y); cout<<"◎"; } if(x==N-1&&y==N-1){ system("cls"); gotoxy(0,0); cout<<"你成功的破解了迷宫!"; system("pause"); return0; } } return0; } 适用于windows 刚开始的N是指边长 按上下左右动


回复

上一页1 页 / 共 0下一页