收录日期:2020/10/28 07:13:35 时间:2016/07/04 16:42:24 标签:数据结构与算法
任意一个矩阵,比如:
1  2  3  4  5  6
18 19 20 21 22 7
17 28 29 30 23 8
16 27 26 25 24 9
15 14 13 12 11 10

螺旋输出为:1 2 3 4 5 6 7 8 9 10 11 12 ………………

貌似很常见的一个题。
不过我不是很清楚。(用C或者java)
请教:1:用一个简单的方法写出来。2:用递归写出来。
最好加上注释啦! 小弟谢过!
void set_array(int counter,int num,int x,int y)
{
//计数器counter,从1开始,每次累加1
//此层的矩阵边长num
//矩阵坐标x,坐标y
  int i;
  if(num<=0)
    return;
  else 
  {
     n[x][y]=counter++;
    for(i=1;i<num;i++)
     n[++x][y]=counter++;
    for(i=1;i<num;i++)
     n[x][++y]=counter++;
    for(i=1;i<num;i++)
     n[--x][y]=counter++;
    for(i=1;i<num-1;i++)
     n[x][--y]=counter++;

  //进入下一层递归
    set_array(counter,num-2,x+1,y);
  }
}
楼主该结贴了吧…
迭代的代码,思路是和2楼一样的。

#include <stdio.h>

int n;
int count=1;
int a[100][100]={0};

void eva(int x)
{
int     i=x;
int     j=x;
if(2*x>n)
a[i][j]=count++;
else
{
for(;j<=n-x;j++)
a[i][j]=count++;
for(;i<=n-x;i++)
a[i][j]=count++;
for(;j>x;j--)
a[i][j]=count++;
for(;i>x;i--)
a[i][j]=count++;
}
}

int main(void)
{
int y=1;
int     i;
int     j;
printf("please input a number between 1 to 99\n");
while(scanf("%d",&n),n>99 || n<1);
while(y<=n/2+n%2)
eva(y++);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%-4d",a[i][j]);
putchar('\n');
}
getch();
return 0;
}

Visual C++ Components的问题 求ASP.NET(VB)+ACCESS三层结构的做法!~! 在写smtp程序时出错,请帮忙解决 技术求助,毕业设计 数组的简单问题! 为一个MFC程序加入打印功能,请问像我这样的情况要怎么样做呢? 技术求助,毕业设计 问一个查询的问题 出现error C2079: \'columns1\' uses undefined class \'CColumns\',高手进来看看是怎么回事? 技术求助、毕业设计 Delphi中线程锁表问题 request.QueryString(\"id\")取不到值的问题,请指教 求问各位高手一个关于时间比较的问题~~急啊 子程序或函数末定义? 不知道怎么回事,登陆到域上的客户机,TCP/IP不能改了! 如何把 SQL 里数据库文件拷贝出来,在另一台机子中恢复? 关于BSTree的小段代码求解```` 遇到霸王文件删不了,help 哪位大侠帮个忙?有关组合的回溯算法,调试不过。谢谢。 DataGrid中内嵌DropDownList的绑定问题 讨论一下,在求职就业版开个红黑榜式的贴子 大家能帮忙介绍下学习JSP什么书或者哪个网站有下载的比较好啊? 字符串转换为整型的问题 google的那种拖动效果(可以保存拖动效果) GridView中使用了checkbox如何绑定到数据源的列中 Delphi2006 做C/S程序,请教大家用什么技术 Keil c 将float 运算变为整数运算的方法 这应该是用事务处理吗 窗口回调函数的问题 【游途道标】0分贴