
http://oj.ecustacm.cn/problem.php?id=1106
#include<iostream>
#include<cstdio>
using namespace std;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
//上 右 下 左
int main(void)
{
int n;
while(cin>>n)
{
int s[25][25]={0};
bool m[25][25]={false};
int sum=n*n;
int number=1;
int x,y;
int d=2;
x=0,y=n-1;//起点
while(sum--)
{
s[x][y]=number++;
m[x][y]=true;
int a=x+dx[d],b=y+dy[d];
if(a<0||a>=n||b<0||b>=n||m[a][b])
{
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
cout<<s[i][j]<<" ";
}
cout<<s[i][j]<<endl;
}
}
return 0;
}
这篇博客介绍了如何使用递归和回溯的方法,通过上右下左移动规则实现一个简单的二维迷宫生成算法,用以填充一个数独格子大小的矩阵。代码展示了从起点到所有数字位置的路径绘制过程。
3744

被折叠的 条评论
为什么被折叠?



