HDU 4740 The Donkey of Gui Zhou (模拟)
由于一开始考虑的很不周到,找到很多bug.....越改越长,不忍直视。 不是写模拟的料......................
反正撞墙或者碰到已经走过的点就会转向,转向后还碰到这两种情况就会傻站那不动了......
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 1111 using namespace std; int vis1[MAX][MAX];
int vis2[MAX][MAX];
int step1[MAX][MAX];
int step2[MAX][MAX];
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
struct node {
int x,y,dir,kind;
} q[1011111],st,end,ans,stop;
int head,tail,n,yes;
int flag1 , flag2; bool inside(int x,int y) {
if(x >= 0 && x < n && y >= 0 && y < n) return true;
return false;
} bool ok(int x,int y,int kind) {
if(kind == 1 && vis1[x][y] == 0) return true;
if(kind == 2 && vis2[x][y] == 0) return true;
return false;
} void init() {
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
memset(step1,-1,sizeof(step1));
memset(step2,-1,sizeof(step2));
head = 0;
tail = 0;
yes = 0;
flag1 = 0;
flag2 = 0;
stop.x = -1;
stop.y = -1;
} void getstop(node t,node tt) {
stop.x = t.x;
stop.y = t.y;
if(tt.kind == 1) flag1 = 1,stop.kind = 1;
if(tt.kind == 2) flag2 = 1,stop.kind = 2;
} void bfs() {
vis1[st.x][st.y] = 1;
vis2[end.x][end.y] = 1;
step1[st.x][st.y] = 0;
step2[end.x][end.y] = 0;
q[head++] = st;
q[head++] = end;
while(head != tail) {
node t = q[tail++];
//cout << t.x << ' ' << t.y << endl;
if(step1[t.x][t.y] == step2[t.x][t.y] && step1[t.x][t.y] != -1) {
ans.x = t.x;
ans.y = t.y;
yes = 1;
return ;
}
if(t.x == stop.x && t.y == stop.y && t.kind != stop.kind) {
ans.x = t.x;
ans.y = t.y;
yes = 1;
return ;
}
if(flag1 == 1 && flag2 == 1) {
ans.x = -1;
return ;
}
node tt = t;
tt.x = t.x + dx[t.dir];
tt.y = t.y + dy[t.dir]; if(inside(tt.x,tt.y)) {
if(ok(tt.x,tt.y,tt.kind)) {
if(tt.kind == 1) vis1[tt.x][tt.y] = 1, step1[tt.x][tt.y] = step1[t.x][t.y] + 1;
if(tt.kind == 2) vis2[tt.x][tt.y] = 1, step2[tt.x][tt.y] = step2[t.x][t.y] + 1;
q[head++] = tt;
} else {
if(tt.kind == 1) {
if(tt.dir == 3) tt.dir = 0;
else tt.dir ++;
tt.x = t.x + dx[tt.dir];
tt.y = t.y + dy[tt.dir];
if(vis1[tt.x][tt.y] == 0) {
vis1[tt.x][tt.y] = 1;
step1[tt.x][tt.y] = step1[t.x][t.y] + 1;
q[head++] = tt;
} else getstop(t,tt); }
if(tt.kind == 2) {
if(tt.dir == 0) tt.dir = 3;
else tt.dir --;
tt.x = t.x + dx[tt.dir];
tt.y = t.y + dy[tt.dir];
if(vis2[tt.x][tt.y] == 0) {
vis2[tt.x][tt.y] = 1;
step2[tt.x][tt.y] = step2[t.x][t.y] + 1;
q[head++] = tt;
} else getstop(t,tt);
}
}
} else {
if(tt.x < 0) {
if(tt.kind == 1) {
tt.dir = 0;
tt.x = t.x + dx[0];
tt.y = t.y + dy[0];
} else {
tt.dir = 2;
tt.x = t.x + dx[2];
tt.y = t.y + dy[2];
}
} else if(tt.x >= n) {
if(tt.kind == 1) {
tt.dir = 2;
tt.x = t.x + dx[2];
tt.y = t.y + dy[2];
} else {
tt.dir = 0;
tt.x = t.x + dx[0];
tt.y = t.y + dy[0];
}
} else if(tt.y < 0) {
if(tt.kind == 1) {
tt.dir = 3;
tt.x = t.x + dx[3];
tt.y = t.y + dy[3];
} else {
tt.dir = 1;
tt.x = t.x + dx[1];
tt.y = t.y + dy[1];
}
} else if(tt.y >= n) {
if(tt.kind == 1) {
tt.dir = 1;
tt.x = t.x + dx[1];
tt.y = t.y + dy[1];
} else {
tt.dir = 3;
tt.x = t.x + dx[3];
tt.y = t.y + dy[3];
}
}
if(inside(tt.x,tt.y)) {
if(ok(tt.x,tt.y,tt.kind)) {
if(tt.kind == 1) vis1[tt.x][tt.y] = 1, step1[tt.x][tt.y] = step1[t.x][t.y] + 1;
if(tt.kind == 2) vis2[tt.x][tt.y] = 1, step2[tt.x][tt.y] = step2[t.x][t.y] + 1;
q[head++] = tt;
} else getstop(t,tt); } else getstop(t,tt);
}
}
} int main() {
while(scanf("%d",&n) && n) {
init();
scanf("%d%d%d",&st.x,&st.y,&st.dir);
st.kind = 1;
scanf("%d%d%d",&end.x,&end.y,&end.dir);
end.kind = 2; bfs();
if(ans.x == -1 || yes == 0) {
printf("-1\n");
} else {
printf("%d %d\n",ans.x,ans.y);
}
}
return 0;
}
HDU 4740 The Donkey of Gui Zhou (模拟)的更多相关文章
- hdu 4740 The Donkey of Gui Zhou bfs
The Donkey of Gui Zhou Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproble ...
- hdu 4740 The Donkey of Gui Zhou(dfs模拟好题)
Problem Description There was no donkey ,) , the down-right cell ,N-) and the cell below the up-left ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- hdu 4740 The Donkey of Gui Zhou
1.扯犊子超多if else 判断的代码,华丽丽的TLE. #include<stdio.h> #include<string.h> #define N 1010 int ma ...
- The Donkey of Gui Zhou
Problem Description There was no donkey in the province of Gui Zhou, China. A trouble maker shipped ...
- HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力)
HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=59 ...
- hdu 4740【模拟+深搜】.cpp
题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...
- HDU 4740 模拟题意
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711743 题意:驴和老虎在方格中跑,跑的方式:径直跑,若遇到边界或之前走过的 ...
- hdu 2629 Identity Card (字符串解析模拟题)
这题是一个字符串模拟水题,给12级学弟学妹们找找自信的,嘿嘿; 题目意思就是要你讲身份证的上的省份和生日解析出来输出就可以了: http://acm.hdu.edu.cn/showproblem.ph ...
随机推荐
- UIWebViewでローカルにあるHTMLを表示する&iOS6からtextAlignmentで指定する値が変更になった
[objective-c]UIWebViewでローカルにあるHTMLを表示する xcode内にHTMLを格納して.そのHTMLをWebViewで表示する方法です. // UIWebViewの初期化UI ...
- AlertDialog基本用法详解
AlertDialog简单介绍: AlertDialog可以在当前活动界面弹出一个对话框,用于提示一些重要信息或是警告内容. AlertDialog置于所有页面元素之上,能够屏蔽其他控件的交互. 由于 ...
- windows8设置环境变量
win8,win8.1如何配置java的环境变量 工具/原料 win8,win8.1 方法/步骤 在你的计算机上右击,选择其中的属性就可以了.如下图所示. 接下来,作出如下图所示的选择. 这个 ...
- 采购件不允许挂BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name BOM_BOMFDBOM 表单名 Form Name BOMFDBOM ...
- [问题解决] 程序部署到Linux服务器乱码
错误: 在windows下开发的eclipse项目需要用java mail发送邮件,在将整个项目部署到linux服务器之后发送的邮件出现了乱码. 发生场景: Linux服务器下的Java mail程序 ...
- iOS6和iOS7代码的适配(4)——tableView
iOS7上不少控件的样子有了变化(毕竟要扁平化嘛),不过感觉变化最大的肯定非tableView莫属.因为这个控件的高度可定制性,原先是使用及其广泛的,这样的一个改变自然也影响颇大. 1.accesso ...
- POJ1008
2014-08-22 题意: (有中文版题目..) 就是两种历法的转换 思路: 把两种历法的细节了解了就很简单了 Haab历法一年365,Tzolkin一年260天 先求出总天数sumDay,然后s ...
- 链表-Add Two Numbers
第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!) /*struct ListNode { int val; struct ListNode *next; };*/ typede ...
- POJ 3111 K Best(最大化平均值)
题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...
- wxWidgets刚開始学习的人导引(2)——下载、安装wxWidgets
wxWidgets刚開始学习的人导引全目录 PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxS ...