// Array.cpp : Defines the entry point for the console application.
//#include "stdafx.h"int n = 5;int array[5][5] = {{0},{0}};
int count = n*n;
int X = -1;
int Y = 0;
int Direct = 1;
int IsEmpty(int pDir)
{
switch(pDir)
{
case 1:
if(X+1>=n)
return 1;
return array[1+X][Y];
break;
case 2:
if(Y+1>=n)
return 1;
return array[X][1+Y];
break;
case 3:
if(X-1<0)
return 1;
return array[X-1][Y];
break;
case 4:
if(Y-1<0)
return 1;
return array[X][Y-1];
break;
default:
break;
}
}
int main(int argc, char* argv[])
{
for(int i = 0;i < n*n ;i ++)
{
if(IsEmpty(Direct))
{
if(Direct == 4)
Direct = 1;
else
Direct ++;
} switch(Direct)
{
case 1:
X++;
break;
case 2:
Y++;
break;
case 3:
X--;
break;
case 4:
Y--;
break;
} array[X][Y] = count--;
}for(int a = 0; a<n;a++)
{
for(int b = 0;b <n;b++)
{
printf("%d ",array[a][b]);
}
printf("\n");
} return 0;
}
//#include "stdafx.h"int n = 5;int array[5][5] = {{0},{0}};
int count = n*n;
int X = -1;
int Y = 0;
int Direct = 1;
int IsEmpty(int pDir)
{
switch(pDir)
{
case 1:
if(X+1>=n)
return 1;
return array[1+X][Y];
break;
case 2:
if(Y+1>=n)
return 1;
return array[X][1+Y];
break;
case 3:
if(X-1<0)
return 1;
return array[X-1][Y];
break;
case 4:
if(Y-1<0)
return 1;
return array[X][Y-1];
break;
default:
break;
}
}
int main(int argc, char* argv[])
{
for(int i = 0;i < n*n ;i ++)
{
if(IsEmpty(Direct))
{
if(Direct == 4)
Direct = 1;
else
Direct ++;
} switch(Direct)
{
case 1:
X++;
break;
case 2:
Y++;
break;
case 3:
X--;
break;
case 4:
Y--;
break;
} array[X][Y] = count--;
}for(int a = 0; a<n;a++)
{
for(int b = 0;b <n;b++)
{
printf("%d ",array[a][b]);
}
printf("\n");
} return 0;
}
{
int n;
object[] iArrLine;
internal Test(int iSize)
{
n=iSize;
iArrLine=new object[n];
for(int i=0;i<n;i++)
{
iArrLine[i]=new object[n];
for(int j=0;j<n;j++)
(iArrLine[i] as object[])[j]=null;
}
} internal void DoIt()
{
this.MakeIt();
foreach(object objLine in iArrLine)
{
foreach(object obj in (objLine as object[]))
Console.Write("\t"+obj);
Console.WriteLine();
}
}
int iCurCol=0;
int iCurRow=0;
int iDir=1; void MakeIt()
{
for(int i=n*n;i>0;i--)
{
(iArrLine[iCurRow] as object[])[iCurCol]=i;
if(i==1)
break;
NextPos();
}
}
void NextPos()
{
switch(iDir)
{
case 1://向下
if(iCurRow==n-1||(iArrLine[iCurRow+1] as object[])[iCurCol]!=null)
{
iDir=2;
NextPos();
}
else
iCurRow++;
break;
case 2://向右
if(iCurCol==n-1||(iArrLine[iCurRow] as object[])[iCurCol+1]!=null)
{
iDir=3;
NextPos();
}
else
iCurCol++;
break;
case 3://向上
if(iCurRow==0||(iArrLine[iCurRow-1] as object[])[iCurCol]!=null)
{
iDir=4;
NextPos();
}
else
iCurRow--;
break;
case 4://向右
if(iCurCol==0||(iArrLine[iCurRow] as object[])[iCurCol-1]!=null)
{
iDir=1;
NextPos();
}
else
iCurCol--;
break;
}
}