博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深搜1--城堡问题
阅读量:5855 次
发布时间:2019-06-19

本文共 2653 字,大约阅读时间需要 8 分钟。

深搜1--城堡问题

一、心得

这个题目的栈实现可以看一看

也是很基础的迷宫问题,也就是一个深搜

二、题目及分析

三、代码及结果

递归

1 #include 
2 #include
3 #include
4 using namespace std; 5 int R,C; //行列数 6 int rooms[60][60]; 7 int color[60][60]; //房间是否染色过的标记 8 int maxRoomArea = 0, roomNum = 0; 9 int roomArea;10 void Dfs(int i,int k) {11 if( color[i][k] ) return;12 ++roomArea;13 color[i][k] = roomNum;14 if( (rooms[i][k] & 1) == 0 ) Dfs(i,k-1); //向西走15 if( (rooms[i][k] & 2) == 0 ) Dfs(i-1,k); //向北16 if( (rooms[i][k] & 4) == 0 ) Dfs(i,k+1); //向东17 if( (rooms[i][k] & 8) == 0 ) Dfs(i+1,k); //向南18 } 19 20 int main() {21 freopen("in.txt","r",stdin); 22 cin >> R >> C;23 for( int i = 1;i <= R;++i)24 for ( int k = 1;k <= C; ++k)25 cin >> rooms[i][k];26 memset(color,0,sizeof(color));27 for( int i = 1;i <= R; ++i)28 for( int k = 1; k <= C; ++ k) {29 if( !color[i][k] ) {30 ++ roomNum ; roomArea = 0;31 Dfs(i,k);32 maxRoomArea =max(roomArea,maxRoomArea);33 }34 }35 cout << roomNum << endl;36 cout << maxRoomArea << endl;37 }

 

 

栈实现

1 #include 
2 #include
3 #include
4 using namespace std; 5 int R,C; //行列数 6 int rooms[60][60]; 7 int color[60][60]; //房间是否染色过的标记 8 int maxRoomArea = 0, roomNum = 0; 9 int roomArea;10 struct Room { int r,c; Room(int rr,int cc):r(rr),c(cc) { } };//构造函数用来初始化,11 void Dfs(int r,int c) { //不用递归,用栈解决,程序其他部分不变12 stack
stk;13 stk.push(Room(r,c));14 while ( !stk.empty() ) {15 Room rm = stk.top();16 int i = rm.r; int k = rm.c;17 if( color[i][k]) stk.pop();18 else {19 ++ roomArea;20 color [i][k] = roomNum;21 if((rooms[i][k]&1)==0) stk.push(Room(i,k-1));//西22 if((rooms[i][k]&2)==0) stk.push(Room(i-1,k));//北23 if((rooms[i][k]&4) == 0) stk.push(Room(i,k+1));//东24 if((rooms[i][k]&8) == 0) stk.push(Room(i+1,k)); //南25 }26 }27 }28 29 int main() {30 freopen("in.txt","r",stdin); 31 cin >> R >> C;32 for( int i = 1;i <= R;++i)33 for ( int k = 1;k <= C; ++k)34 cin >> rooms[i][k];35 memset(color,0,sizeof(color));36 for( int i = 1;i <= R; ++i)37 for( int k = 1; k <= C; ++ k) {38 if( !color[i][k] ) {39 ++ roomNum ; roomArea = 0;40 Dfs(i,k);41 maxRoomArea =max(roomArea,maxRoomArea);42 }43 }44 cout << roomNum << endl;45 cout << maxRoomArea << endl;46 }

 

转载地址:http://niojx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
对比MySQL,一文看透HBase的能力及使用场景
查看>>
我的友情链接
查看>>
2.3更改和显示标签-TextView
查看>>
sublime使用技巧
查看>>
对上次Socket 有关的项目的想法
查看>>
MongoDB在admin库下面执行了db.dropAllUsers()导致没有管理权限要如何处理
查看>>
Apache + Tomcat 配置负载均衡
查看>>
升级OpenSSl出现错误
查看>>
个人memcached演练内容聚集(共11)
查看>>
Sublime Text快捷键和使用技巧
查看>>
Unity游戏开发技巧集锦2.1.3实现效果
查看>>
ArduinoYun教程之Arduino编程环境搭建
查看>>
centos7.1 vnc 配置
查看>>
网络图片嗅探工具driftnet
查看>>
对“车库咖啡的网络现状改造”的一点个人看法
查看>>
MS-SQL2005服务启动发生错误1053处理
查看>>
linix下用keepalived搭建高可用myqsl-ha
查看>>
shell编程(二)
查看>>
wxPython如何布局
查看>>