算法之路之征服上海交大的oj- 从前有座山
来源:互联网 发布:sumif函数匹配数据方法 编辑:程序博客网 时间:2024/05/12 22:25
- 从前有座山
Description
从前有座山,山的俯视图是一个n×n
的矩形,(1,1)位置海拔最低为1
,然后海拔沿环形依次升高。
给定n的值,输出这座山的海拔高度图。
Input Format
输入仅有一行,为一个正整数n
。
Output Format
输出为这座山的海拔高度图。
Sample Input
4
Sample Output
1 2 3 412 13 14 511 16 15 610 9 8 7
一看到这道题的时候我是第一反应使用,深度优先搜索解决此题但是最后发现不能满足此题的需求,其实这道题可以转变成当碰到不能走到路之后就向当前方向的右手边走的题,这个就是这道题的模型,为了各位不要犯我的错误,我贴一下用深度优先搜索解决不了的代码:
#include<iostream>#include<iomanip>#include<string.h>using namespace std;int a[155][155]; int N;int count=0;void bianli(){ for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ cout<<setw(6)<<a[i][j]; } cout<<endl; } } void chushi(){ for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ a[i][j] = -1; } } } bool isOK(){ for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ if(a[i][j] == -1){ return false; } } } return true;} void digui(int x,int y){ if(isOK()||a[x][y]>=0){ return; }else{ a[x][y] = ++count; digui(x,y+1); //向右走 digui(x+1,y);//向下走 digui(x,y-1);//向左走 digui(x-1,y); //向上走 } } int main(){ memset(a,0,sizeof(a)); cin>>N; chushi(); digui(1,1); bianli(); return 0;}
运行结果:
那深度优先行不通,只好用模拟路径的思想了,正确的代码如下:
#include<iostream>#include<string.h>#include<iomanip>using namespace std;int a[155][155];//存储地图 int N;//边界 int count=0;//要写入的数据 void bianli(){//遍历地图 for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ cout<<setw(6)<<a[i][j]; } cout<<endl; } } bool isOK(){//判断是否走完地图 for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(a[i][j] == -1){ return false; } } } return true;} int main(){ cin>>N; int flag = 0;//记录当前要转的右边的方向 int j = 0,k = 0;//记录走到的下标 memset(a,-1,sizeof(a)); while(1){ if(isOK()){ break; } if(flag == 0){//向右 for(;;j++){ if(j >= N || a[k][j] > 0){ flag=1; j--; break; } a[k][j] = ++count; } } else if(flag == 1){//向下 while(1){ ++k; if(k >= N || a[k][j] > 0){ flag=2; k--; break; } a[k][j] = ++count; } } else if(flag == 2){//向左 while(1){ j--; if(j < 0 || a[k][j] > 0){ flag=3; j++; break; } a[k][j] = ++count; } } else if(flag == 3){//向上 while(1){ k--; if(k < 0 || a[k][j] > 0){ flag=0; k++; j++; break; } a[k][j] = ++count; } } } bianli(); return 0;}
阅读全文
0 0
- 算法之路之征服上海交大的oj- 从前有座山
- 算法之路之征服上海交大的oj-矩阵翻转
- 算法之路之征服上海交大的oj-排序
- 算法之路之征服上海交大的oj-Ackerman函数
- 算法之路之征服上海交大的oj- 括号匹配
- 算法之路之征服上海交大的oj- 数独
- 算法之路之征服上海交大的oj- 二哥炒股票
- #算法之路之征服上海交大的oj-高精度加法
- 算法之路之征服上海交大的oj-A+B的问题
- 算法之路之征服上海交大的oj-西西弗斯式的命运
- 算法之路之征服上海交大的oj- 二哥的储蓄计划
- 算法之路之征服上海交大的oj- 二哥摘苹果
- 算法之路之征服上海交大的oj- 二哥养细菌
- OJ-上海交大-1021. 从前有座山
- 征服donnet的漫长之路开始了
- 算法之路三:HDU OJ:2000
- 算法之路三:HDU OJ:2003
- 算法之路三:HDU OJ:2004
- 你不得不看的“互联网+企业购”大趴攻略
- JNDI之旅--各应用服务器JNDI初始配置
- JavaScript之作用域与闭包详解
- 新股发审常态化或将终结? 证监会: 新一届发审委在法律法规框架内依法履行职责
- python3.6.1 + opencv环境搭建整理
- 算法之路之征服上海交大的oj- 从前有座山
- HTML中 css实现滚动页面时固定页面其中一栏的效果
- Mac OS X 安装protobuf
- BottomNavigationBar 图片颜色被改变
- jquery 点击按钮,再显示4张图片,再次点击,再次显示4张图片
- Ruby:字符串处理函数
- mybatis缓存(二)+redis
- 配置anaconda镜像
- linux内部命令与外部命令