分享一个螺旋矩阵的实现

玩笑 2010-05-09 03:04:42
#include <stdio.h>

void csh ( const int i, const int m, int arr[i][m] );
void cl ( const int i, const int m, int arr[i][m] );
void print ( const int i, const int m, int arr[i][m] );

int main(int argc, char **argv)
{
int x,y;

printf ( "X,Y:" );
scanf ( "%d,%d", &x, &y );
int arr[x+2][y+2];
printf ( "%d\t%d\n", x, y );

csh ( x+2, y+2, arr );
cl ( x+2, y+2, arr );
print ( x+2, y+2, arr );

return 0;
}

void csh ( int i, const int m, int arr[i][m] ) {
int j,k;
for ( j = 0; j < i; j++ ){
for ( k = 0; k < m; k++ ) {
arr[j][k] = 0;
}
}
for ( j = 0; j < i; j++ ) {
arr[j][0] = arr[j][m-1] = -1;
}
for ( j = 0; j < m; j++ ) {
arr[0][j] = arr[i-1][j] = -1;
}
}

void cl (const int i, const int m, int arr[i][m]) {
int x,y,j,k,n;
x = y = 1;
j = k = n = 0;
while ( arr[x+j][y+k] == 0){
while ( arr[x+j][y+k] == 0){
arr[x += j][y += k] = n++;
}
if ( arr[x][y+1] == 0 ){
j = 0;
k = 1;
} else if ( arr[x+1][y] == 0 ) {
j = 1;
k = 0;
} else if ( arr[x][y-1] == 0 ) {
j = 0;
k = -1;
} else {
j = -1;
k = 0;
}
}
}

void print ( const int i, const int m, int arr[i][m] ) {
int j,k;
for ( j = 1; j < i-1; j++ ){
for ( k = 1; k < m-1; k++ ) {
printf ( "%5d" , arr[j][k] );
}
putchar('\n');
}
}
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
panxuxuyan 2012-03-16
  • 打赏
  • 举报
回复
主函数改成循环就行了
panxuxuyan 2012-03-16
  • 打赏
  • 举报
回复
scanf ( "%d,%d", &x, &y );
int arr[x+2][y+2];

void csh ( int i, const int m, int arr[i][m] ) {
int j,k;
for ( j = 0; j < i; j++ ){
for ( k = 0; k < m; k++ ) {
arr[j][k] = 0;
}
}
for ( j = 0; j < i; j++ ) {
arr[j][0] = arr[j][m-1] = -1;
}
for ( j = 0; j < m; j++ ) {
arr[0][j] = arr[i-1][j] = -1;
}
}

变长数组的主要用途就在这了,
panxuxuyan 2012-03-16
  • 打赏
  • 举报
回复
玩笑是个高手
fengyuxiaole 2010-05-09
  • 打赏
  • 举报
回复
谢谢啊 呵呵
玩笑 2010-05-09
  • 打赏
  • 举报
回复
WIN下codelite编译通过(GCC加参数--std=c99)
LINUX下用GCC时也要加参数,
南气子水 2010-05-09
  • 打赏
  • 举报
回复
编译不通过?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧