校园迷宫-rqnoj-195
来源:互联网 发布:3g网络速度 编辑:程序博客网 时间:2024/04/29 08:33
和上面的八数码难题差不多,因为是求最优解,所以用队列,至于判重,把一个个坐标映射成一个整数。
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<map>#include<queue>#include<algorithm>using namespace std;const int maxn=2000+10;int a[maxn][maxn];int n,m;struct state{ int x,y; int step;};state start,target;queue<state> q;map <int,int> hash;void init(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);}int gethash(state st){ return st.x*m+st.y;}void readdata(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&a[i][j]); // printmap(); scanf("%d%d",&start.x,&start.y); scanf("%d%d",&target.x,&target.y); start.step=0; q.push(start); hash[gethash(start)]=1;}bool trytoinsert(state st){ int h=gethash(st); if (hash[h]) return false; hash[h]=1; return true;}void check(state st){ if (gethash(st)==gethash(target)) { printf("%d\n",st.step); exit(0); }}int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};void expand(state cur, state &st,int i){ memcpy(&st,&cur,sizeof(cur)); st.x+=dx[i]; st.y+=dy[i]; st.step++;}void work(){ while (!q.empty()) { state cur=q.front(); q.pop(); //printf("%d,%d,%d\n",cur.x,cur.y,cur.step); for (int i=0;i<4;i++) { state st; expand(cur,st,i); if (a[st.x][st.y] || st.x<1 ||st.x>n ||st.y<1 || st.y>m) continue; check(st); if (trytoinsert(st)) q.push(st); } } printf("No Answer!\n");}int main(){ //init(); readdata(); work(); return 0;}
- 校园迷宫-rqnoj-195
- 【图论】【RQNOJ】校园迷宫
- RQNOJ 校园迷宫-宽度优先搜索
- 【其他】【RQNOJ】迷宫路径
- 校园迷宫(rqnoj195)
- 【宽搜】校园迷宫
- rqnoj-332 & rqnoj-53
- 校园
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫?
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- Standford机器学习 线性回归Cost Function和Normal Equation的推导
- HDU1047(大数相加)
- 热的本质
- [总结]扩展欧几里德
- Spring IOC
- 校园迷宫-rqnoj-195
- 敏捷开发-快速迭代
- 关于文件的写入与读取
- 关于Linux的进程和线程
- CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)
- HDU1250(大数相加)
- CSDN博客-客户端(非官方)
- 安装与配置windbg 的符号文件(转自一片文章的回复,回复者RegKiller)
- 1007 DNA Sorting