算法竞赛入门经典: 第三章 数组和字符串 3.3蛇形填数

来源:互联网 发布:帝国cms企业网站模板 编辑:程序博客网 时间:2024/05/18 06:15
/*蛇形填数:在n*n方阵里填入1,2,...,n*n。要求填成蛇形。例如n=4时方阵为:10 11 12 19  16 13 28  15 14 37  6  5  4上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n<=80001020,n-11011121,n-1................n-2,0n-2,1n-2,2n-2,n-1n-1,0n-1,1n-1,2n-1,n-1*//*关键:1 本质是 iMatrix[++x][y],iMatrix[x][++y],iMatrix[x][--y],iMatrix[--x][y]的变化,用标记数组和迷宫界限来过滤搜索条件2 while( x+1 < n && !iMatrix[x+1][y])//从上向下,横坐标不能越界,并且不能被访问过,索性把一排全部处理结束再做下一排3 memset(iMatrix,0,sizeof(iMatrix));//需要对二维数组重新赋值4 printf("%3d ",iMatrix[i][k]);//防止不美观,用printf("%3d ",iMatrix[i][k])*/#include <stdio.h>#include <stdlib.h>#include <memory.h>#define MAXSIZE 50/*void snakeNum(int n){int iMatrix[MAXSIZE][MAXSIZE];int iDown,iLeft,iRight,iUp;for(int i = 1 ; i <= n*n ; i++){//先向下for(iDown = 0; iDown <= n-2 ;iDown++)//初始值和迭代区间是动态变化的{iMatrix[iDown][n-1] = i;//列在动态变化}//再向左if(iDown >= n-1){for(iLeft = n-1; iLeft >= 1; iLeft--)//最后一排{iMatrix[n-1][iLeft] = i;}}//再向上if(iLeft >=0 ){for(iUp = n-1;iUp >= 1 ; iUp--){iMatrix[iUp][0] = i;}}//再向右if(iUp >= 0){for(iRight = 0 ; iRight <= n - 2 ; iRight++){iMatrix[0][iRight] = i;}}}}*/void snakeNum(int n){int iMatrix[MAXSIZE][MAXSIZE];memset(iMatrix,0,sizeof(iMatrix));//需要对二维数组重新赋值int iVal = 1;int y = n-1,x = 0;iMatrix[x][y] = iVal;while(iVal < n*n)//=号不能取,否则陷入死循环中{//从上向下,横坐标不能越界,并且不能被访问过,索性把一排全部处理结束再做下一排//while( x+1 < n - 1 && iMatrix[x+1][y] != 0)while( x+1 < n && !iMatrix[x+1][y]){iMatrix[++x][y] = ++iVal;}//从右向左,纵坐标不能越界,并且不能被访问过//while( y-1 > 0 && iMatrix[x][y-1] != 0)while( y-1 >= 0 && !iMatrix[x][y-1]){iMatrix[x][--y] = ++iVal;}//从下向上,横坐标不能越界//while( x-1 > 0 && iMatrix[x-1][y] != 0)while( x-1 >= 0 && !iMatrix[x-1][y]){iMatrix[--x][y] = ++iVal;}//从左向右,纵坐标不能超过n//while( y+1 < n-1 && iMatrix[x][y+1] !=0 )while( y+1 < n && !iMatrix[x][y+1]){iMatrix[x][++y] = ++iVal;}}for(int i = 0 ; i < n ; i++ ){for(int k = 0 ; k < n ; k++){printf("%3d ",iMatrix[i][k]);//防止不美观,用printf("%3d ",iMatrix[i][k])}printf("\n");}}int main(int argc,char* argv[]){int n;scanf("%d",&n);snakeNum(n);system("pause");return 0;}

0 0
原创粉丝点击