首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

回旋矩阵的有关问题

2013-01-01 
回旋矩阵的问题static intb 0, c 0, d 1, e 2, k 1, p 1int Snack(int **a, int b, int c, i

回旋矩阵的问题


static int  b = 0, c = 0, d = 1, e = 2, k = 1, p = 1;
int Snack(int **a, int b, int c, int x1, int y1, int row, int col )   //蛇形矩阵函数
{
if(k > row*col-1)
{
for( i = 0; i < row ; i++ )
for( j = 0 ; j < col ; j++ )
if(a[i][j]<0)                                   //查找并对最后一个数据赋值
{a[i][j]=k;break;}
return 1;
}
else if(p == 1)                                              //向右横行
{
for( ; c < y1-1 ; c++ )
{a[b][c] = k;k++;}
y1--;
p=2;
Snack( a,b, c, x1, y1, row, col );
}
else if( p == 2 )                                            //向下竖列
{
for( ; b<x1-1 ; b++ )
{a[b][c] = k;k++;}
x1--;
p=3;
Snack( a, b, c, x1, y1, row, col );
}
else if( p == 3 )                                            //向左横行
{
for( ; c >= d ; c-- )
{a[b][c] = k;k++;}
d++;
p=4;
Snack( a, b, c, x1, y1, row, col );
}
else                                                         //向上竖列
{
for( ; b >= e ; b-- )
{a[b][c] = k;k++;}
e++;
p=1;
Snack( a, b, c, x1, y1, row, col );
}
}

[解决办法]
我说一下我想到的一个思路。先初始化数组的每个元素为0.然后赋值时,先检测周围的情况,优先赋值的顺序是该元素几何位置的上、右、左、下,赋值时该位置的元素值为0,用一个变量记录每次移动的次数,直到该元素的周围没有值为0的元素,则结束。
[解决办法]

這個用遞歸不好直觀,

#include <stdio.h>
#define N 4
int arr[N][N];


int main(void)
{
int i,j,k,n;
i=j=k=0;
n=1;
for (k=0; k<N/2+1; k++) {
for (j=k; j<N-k;j++)
arr[k][j]=n++;
for (j=k+1; j<N-k;j++)
arr[j][N-k-1]=n++;
for (j=N-k-2; j>=k;j--)
arr[N-k-1][j]=n++;
for (j=N-k-2; j>k;j--)
arr[j][k]=n++;
}
for (i=0;i<N;i++) {
for (j=0;j<N;j++)
printf("%4d", arr[i][j]);
printf("\n");
}
return 0;
}


[解决办法]
请参考我的博文
http://blog.csdn.net/xuchao1229/article/details/8117312

热点排行