首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

hdu4740【杭州网赛、模拟、有些搜索?】

2013-09-18 
hdu4740【杭州网赛、模拟、有点搜索?】当时看了这题就感觉so easy。。。本来不想写的,后来感觉是不是可以练一下搜

hdu4740【杭州网赛、模拟、有点搜索?】

当时看了这题就感觉so easy。。。  本来不想写的,后来感觉是不是可以练一下搜索水平。。

比赛时有人过了就没写。       比赛完了写一下。

实现还不是那么顺利,  囧hdu4740【杭州网赛、模拟、有些搜索?】

本来自己以为这题能练下搜索,其实DFS、BFS都没用到,也许模拟中有点搜索吧。   

还是类似方格的东西把外围也设置成未标记要好的多,做题多了也许就有这种感觉了吧。

还有自己忽略了驴 老虎前面是已经走过的路也可以转弯。   BS!!


#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;const int MAX_N = 1000 + 10;int n;//E,S,W,Nint dx[4] = { 0, 1, 0, -1 }, dy[4] = { 1, 0, -1, 0 };struct Walker {    int x, y, d, turn;    bool active;    bool vis[MAX_N][MAX_N]; //where had he visited    void read(int turn) {        this->turn = turn;        cin >> x >> y >> d;        active = true;        memset(vis, 0, sizeof vis);    }    bool check(int r, int c) {        return r >= 0 && r < n && c >= 0 && c < n && !vis[r][c];    }    void walk() { //can walk?        //go stright        if (check(x + dx[d], y + dy[d])) {            x += dx[d], y += dy[d];            goto end;        }        d = (d + turn) % 4;        if (check(x + dx[d], y + dy[d])) {            x += dx[d], y += dy[d];            goto end;        }        active = false;        //dead >_<        return;        end: {        }        vis[x][y] = true;    }};Walker A, B;int main() {    for (;;) {        cin >> n;        if (n == 0)            break;        A.read(1);        B.read(3);        A.vis[A.x][A.y] = true;        B.vis[B.x][B.y] = true;        for (;;) {            if (!A.active && !B.active)                break;        //end!            if (A.x == B.x && A.y == B.y) {                cout << A.x << " " << A.y << endl;                goto end;            }            if (A.active) {                A.walk();            }            if (B.active) {                B.walk();            }        }        cout << -1 << endl;        end: {        }    }}



热点排行