雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

顺时针螺旋数——DFS

Posted on 2011-10-27 21:30  huhuuu  阅读(241)  评论(0编辑  收藏  举报
1 2 3
8 9 4
7 6 5
View Code
#include<stdio.h>
#include<string.h>

int map[99][99];

int pi[4]={0,-1,0,1};
int pj[4]={-1,0,1,0};
int step=0;

void dfs(int fi,int fj)
{

int i,k;

for(i=0;i<=3;i++)
{
if(map[fi+pi[i]][fj+pj[i]]!=0)
continue;

for(k=1;;k++)
{
if(map[fi+pi[i]*k][fj+pj[i]*k]!=0)break;

map[fi+pi[i]*k][fj+pj[i]*k]=step++;
}
dfs(fi+pi[i]*(k-1),fj+pj[i]*(k-1));
}

return ;
}

int main()
{
int i,j,n;

while(scanf("%d",&n)!=EOF)
{
memset(map,1,sizeof(map));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
map[i][j]=0;
}
}
step=1;

dfs(1,0);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",map[i][j]);
}
printf("\n");
}
}

return 0;
}