解题思路:通过dfs填写最方便 详解请看代码
注意事项:1、向下和向右都能走时要向右走,需要特判
2、for循环找方向时要按照下左上右的顺序
3、每行最后一个元素后没有空格
参考代码:
#include<iostream> using namespace std; const int N=110; int a[N][N],n; int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1}; //方向按照下左上右 bool find(int xx,int yx) //判断能不能走 { if(a[xx][yx]==0&&xx>0&&yx>0&&xx<=n&&yx<=n) //没走过并且没出界 return true; return false; } void dfs(int x,int y,int t) { a[x][y]=t; // 给数组相应位置赋值 if(t==n*n) // 最后一个数为n*n,结束 return ; if(find(x+1,y)&&find(x,y+1)) //如果向右向下都能走 则向右走 dfs(x,y+1,t+1); for(int i=0;i<4;i++) { int xx=x+dx[i],yx=y+dy[i]; if(find(xx,yx)) dfs(xx,yx,t+1); } } int main(void) { while(cin>>n){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=0; //初始化数组为0 dfs(1,n,1); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) if(j==n) cout<<a[i][j]<<endl; //最后一个元素输出换行 else cout<<a[i][j]<<' '; } cout<<endl;} return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:643 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:597 |
钟神赛车 (C++代码)浏览:905 |
C语言训练-字符串正反连接 (C语言代码)浏览:664 |
数列排序 (C语言代码)浏览:858 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:511 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:658 |
数组输出 (C语言代码)--此题的题目描述有问题浏览:1844 |
母牛的故事 (C语言代码)浏览:992 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |