您的位置:首页 > 其它

螺旋矩阵

2017-03-24 20:44 204 查看
要求:输出螺旋矩阵(如图所示):

1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7

解决方案:

一圈一圈的解决,因为每一圈的规律都是一样的,所以用到递归。

c++代码:

#include <iostream>
#include<iomanip>
#define maxsize 20

using namespace std;
int dcount=1;
void fun(int a[maxsize][maxsize],int x,int y)
{
int i;
if(x>y)
return;
else                      //一次循环
{
for(i=x;i<=y;i++)
{
a[i][x]=dcount;
dcount++;
}
for(i=x+1;i<=y;i++)
{
a[y][i]=dcount;
dcount++;
}
for(i=y-1;i>=x;i--)
{
a[i][y]=dcount;
dcount++;
}
for(i=y-1;i>=x+1;i--)
{
a[x][i]=dcount;
dcount++;
}
fun(a,x+1,y-1);         //函数调用
}
}
int main()
{
int a[maxsize][maxsize],i,j,row;
cout<<"请输入矩阵维数:";
cin>>row;
fun(a,1,row);
for(i=1;i<=row;i++)
{
for(j=1;j<=row;j++)
cout<<setw(6)<<a[i][j];
cout<<endl;
}
return 0;
}


Java代码:

(Java初学者,自己尝试了一下,感觉代码整体结构不太好)

import javax.swing.JOptionPane;

public class Exc_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n,num=1,i,j,a[][]=new int[20][20];
String s=JOptionPane.showInputDialog("Please cin the n:");
n=Integer.parseInt(s);
fun(a,1,n,num);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
System.out.print(a[i][j]+" ");
System.out.print("\n");
}
}

static void fun(int a[][],int s,int e,int dcount)
{
if(s>e)
return;
else
{
for(int i=s;i<=e;i++)
{
a[i][s]=dcount;
dcount++;
}
for(int i=s+1;i<=e;i++)
{
a[e][i]=dcount;
dcount++;
}
for(int i=e-1;i>=s;i--)
{
a[i][e]=dcount;
dcount++;
}

9ff4
for(int i=e-1;i>=s+1;i--)
{
a[s][i]=dcount;
dcount++;
}
fun(a,s+1,e-1,dcount);
}
}
}


问题解决时主要借助了递归算法,但是在写最外圈的实现代码是过于繁琐了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: