博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
水管工游戏 (深搜)
阅读量:6982 次
发布时间:2019-06-27

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

水管工游戏

 

本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可。

代码如下:

#include
int a[51][51];int book[51][51],n,m,flag=0,top=0;void dfs(int x,int y,int front); struct note{ int x; int y;}s[100];int main(void){ int i,j,num=0; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&a[i][j]); } } dfs(1,1,1); if(flag==0) { printf("impossible\n"); } else { printf("\n"); } return 0;}void dfs(int x,int y,int front)//front 的值为 1 ,2 ,3 ,4 分别表示进水口的位置在 左,上,右,下{ int i; /* 测试当前栈内坐标 */// for(i=1;i<=top;i++)// {// printf("(%d,%d)",s[i].x,s[i].y);// }// printf("\n"); if(x==n&&y==m+1) //此处的判定条件为 m+1 { flag=1; for(i=1;i<=top;i++) { printf("(%d,%d)",s[i].x,s[i].y); } return ; } if(x<1||x>n||y<1||y>m) { return ; } if(book[x][y]==1) { return ; } book[x][y]=1; //将当前尝试坐标入栈 top++; s[top].x=x; s[top].y=y; if(a[x][y]>=5&&a[x][y]<=6)//当前水管是直管的情况 { if(front==1) { dfs(x,y+1,1); } if(front==2) { dfs(x+1,y,2); } if(front==3) { dfs(x,y-1,3); } if(front==4) { dfs(x-1,y,4); } } if(a[x][y]>=1&&a[x][y]<=4)//当前水管是弯管的情况 { if(front==1) { dfs(x+1,y,2); dfs(x-1,y,4); } if(front==2) { dfs(x,y+1,1); dfs(x,y-1,3); } if(front==3) { dfs(x-1,y,4); dfs(x+1,y,2); } if(front==4) { dfs(x,y+1,1); dfs(x,y-1,3); } }// book[x][y]=0; // 本语句可将标记数组复原,本题中可有可无 top--; //将当前尝试坐标出栈 return ; }

 

转载于:https://www.cnblogs.com/lbd_smile/p/4568842.html

你可能感兴趣的文章
分布式锁方案论证与实现
查看>>
海外邮件屡屡退信,使用海外邮件中继势不可挡
查看>>
百度 Ueditor 编辑器学习笔记
查看>>
tomcat单机多实例配置实战
查看>>
非对称加密过程详解(基于RSA非对称加密算法实现)
查看>>
递归增量监控目录/文件,逐行读取内容并输出
查看>>
CHAR和VARCHAR
查看>>
GIT分支创建和合并
查看>>
FreeBSD9.0 安装php-fpm
查看>>
MapXtreme 2005 学习心得 相关代码知识(三)
查看>>
CSS 字体系列
查看>>
[M0]Android开启odex,优化开机速度
查看>>
transfer.sh:通过命令行简单的创建文件分享
查看>>
java 远程debug
查看>>
高德地图POI查找
查看>>
Java transient关键字
查看>>
磁盘格式化
查看>>
Mybatis 在 insert 之后想获取自增的主键 id,但是总是返回1
查看>>
遭遇各种内容监管,有些企业到底欠缺的是什么,仅仅是价值观吗?
查看>>
华为交换机重置密码
查看>>