前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

hdu1045

作者头像
@坤的
发布2018-06-04 11:10:55
5690
发布2018-06-04 11:10:55
举报
文章被收录于专栏:*坤的Blog

#include<iostream> using namespace std; int count = 0, n = 0; //判断该ch[x][y]是否可以放置 bool isOk(char **ch, int x, int y){ int i; //向上检索 for (i = x - 1; i >=0; --i){ if(ch[i][y]=='0'){ return false; } //碰到墙 if(ch[i][y] == 'X'){ break; } } //向左检索 for (i = y - 1; i >=0; --i){ if(ch[x][i]=='0'){ return false; } //碰到墙 if(ch[x][i] == 'X'){ break; } } return true; } void search(char **ch, int k, int step){ int x, y; if(k == n * n){//到达最末 //是否大于之前的count if(step > count){ count = step; return; } }else { x = k / n;//行数 y = k % n;//列数 if(ch[x][y] == '.' && isOk(ch, x, y)){ ch[x][y] = '0'; search(ch, k+1, step+1);//进入k+1步的搜索 //关键理解下面两句!回溯! ch[x][y] = '.';//重新赋值为'.',为了下一轮的搜索 search(ch, k+1, step); }else { //ch[x][y]不为'.',进入k+1步 search(ch, k+1, step); } } return; } int main(){ while(cin>>n && n){ count = 0; char **ch = new char* [n]; for(int i = 0; i < n; ++i){ ch[i] = new char[n]; } for(int j = 0; j < n; ++j){ for(int k = 0; k < n; ++k){ cin>>ch[j][k]; } } search(ch, 0, 0); cout<<count<<endl; } return 0 ; }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档