算法竞赛入门经典: 第三章 数组和字符串 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
- 算法竞赛入门经典: 第三章 数组和字符串 3.3蛇形填数
- 《算法竞赛入门经典》第三章(蛇形填数)
- 算法竞赛入门经典 蛇形填数
- {算法竞赛入门经典}第三章 蛇形填数 边界预判
- 算法竞赛入门经典 例3-2蛇形填数
- 算法竞赛入门经典 例题 3-2 蛇形填数
- 算法竞赛入门经典ch3_ex2蛇形填数
- 算法之路二:刘汝佳算法竞赛入门经典 3.3蛇形填数
- 刘汝佳p39,3-3(蛇形填数)算法竞赛入门经典第二版
- 算法竞赛入门经典 蛇形数组
- 算法竞赛入门 例题3-2 蛇形填数P35
- 算法竞赛入门经典: 第三章 数组和字符串 3.1逆序输出
- 算法竞赛入门经典: 第三章 数组和字符串 3.2开灯问题
- 算法竞赛入门经典: 第三章 数组和字符串 3.4竖式问题
- 算法竞赛入门经典: 第三章 数组和字符串 3.5回文串
- 【经典算法】:蛇形填数
- 算法竞赛_蛇形填数_C++
- 算法竞赛入门经典(第二版)-刘汝佳-第三章 数组与字符串 循环小数
- IOS开发 @property中assign、copy 、retain等关键字的理解
- SSL心跳漏洞的检测
- X的追求道路 SDUT 3027
- iOS中.m中,@interface部分的作用
- 21-IO流-14-IO流(字符流-缓冲区-BufferedReader-readLine方法原理)
- 算法竞赛入门经典: 第三章 数组和字符串 3.3蛇形填数
- hdu 1358 Period(kmp)
- HDU_1558_SegmentSet
- 21-IO流-15-IO流(字符流-缓冲区-复制文本文件)
- 本地推送的使用方法
- hdu 2795(单点修改)
- Unicode
- Codeforces Round #315 (Div. 2) B. Inventory
- 检测CPU利用率的Shell脚本