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 ...
随机推荐
- SQL Server MySQL 中的 in 与 null
例子: create table t(x int,y int); insert into t(x,y) values(1,1),(2,2),(null,null); 查询一: select x,y f ...
- 如何解决”无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。“
字段Time在数据库中为datetime类型 dr.GetString(3).ToString() dr.GetString(3).ToString() => dr.GetDateTime(3) ...
- J2SE知识点摘记(八)
1. 多线程指的是在单个进程中可以同时运行多个不同的线程,执行不用的任务.多线程意味着一个程序的多行语句可以看上去几乎同时进行. 同样作为基本的执行单元,线程是划分得比进程更小的执行单位 ...
- asp.net数据库操作类(二)
第二版的数据库访问类出炉了: C# Code 123456789101112131415161718192021222324252627282930313233343536373839404142 ...
- Enabling Process Accounting on Linux HOWTO
http://tldp.org/HOWTO/Process-Accounting/index.html
- Day4_代码重用与函数
知识点速记: 重用代码的方法:脚本包含require().include(); 全局配置文件php.ini(auto_prepend_file/auto_append_file); 目录配置文件.ht ...
- dg error
startup force;ORACLE instance started. Total System Global Area 1068937216 bytesFixed Size ...
- [置顶] How to compile openjdk 7 in RHEL5
1. 为什么要编译openjdk的code? 因为从Eclipse调试JDK的代码时,方法中的局部变量不能显示,这样是因为编译JDK时,没有编译成debug版本. 2. RHEL5中自带的开发者JDK ...
- 【iOS】Plist-XML-JSON数据解析
网络上数据传输通用的有XML.JSON等,iOS中也能够用Plist. 要进行传输数据.就要首先进行序列化: 1.序列化. 对象转换成二进制流.(这个一句话即可) .反序列化. 二进制流转换为对象等 ...
- HTTP错误500.22 检测到在集成的托管管道模式下不适用的ASP.NET设置
这里主要把集成模式改成经典模式 解决方案一: 解决方案二: 修改配置文件web.config 将 <configuration> <system.web> <compil ...