codevs1026

题目连接:http://codevs.cn/problem/1026/

思路:这道题网站吧它归为了广搜  可我广搜学的真的不怎么样 然后我就用深搜写的 感觉深搜也是很简单的

我们从起点开始用一个顺序然后一直找一直找直到碰到障碍或者碰到小镇的墙壁就可以换方向了  如果无路可走那么就返回

最终要的一点是 千万别忘记查重 如果不查重一定超时用一个三维数组f来表示这个点后面能不能行

下面看代码:代码中有许多解释

#include<stdio.h>
#include<cstring>
char map[60][60];  //记录地图的
char order[1005]; //记录方向的
int m, n, t;
bool f[60][60][1005];  //查重的
char diction[8];

void dfs(int a,int b,int cur)
{
    if(cur == t)
    {
        map[a][b] = ‘*‘;
        return ;
    }
    if(f[a][b][cur] != 0)
        return ;
    f[a][b][cur] = 1;     //这个地方千万别忘写了查重用的   没有这个一定超时
    if(order[cur] == ‘N‘)
    {
        while((a - 1) >= 0&&map[a - 1][b] != ‘X‘)
        {
            a--;
            dfs(a,b,cur + 1);
        }
    }
    else if(order[cur] == ‘S‘)
    {
        while((a + 1) < n&&(map[a + 1][b] != ‘X‘))
        {
            a++;
            dfs(a,b,cur + 1);
        }
    }
    else if(order[cur] == ‘W‘)
    {
        while((b - 1) >= 0&&map[a][b - 1] != ‘X‘)
        {
            b--;
            dfs(a,b,cur + 1);
        }
    }
    else if(order[cur] == ‘E‘)
    {
        while((b + 1) < m&&map[a][b + 1] != ‘X‘)
        {
            b++;
            dfs(a,b,cur + 1);
        }
    }
}
int main()

{
    int i,j;
    scanf("%d%d",&n,&m);
    for(i = 0;i < n;i++)
    {
        scanf("%s",map[i]);
    }
    scanf("%d",&t);
    for(j = 0;j < t;j++)
    {
        scanf("%s",diction);
        order[j] = diction[0];
    }
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < m;j++)
        {
            if(map[i][j] == ‘*‘)
                break;
        }
        if(j != m)
            break;
    }
     map[i][j] = ‘.‘;             //这个地方也是非常重要 起点一定要化成.不然也会wrong answer
    memset(f, 0, sizeof(f));
    dfs(i,j,0);
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < m;j++)
        {
            printf("%c",map[i][j]);
        }
        printf("\n");
    }
    return 0;
}
时间: 2024-10-20 11:54:57

codevs1026的相关文章

codevs1026商务旅行

1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间.该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环. 你的任务是帮助该商人计算一下他的最短旅行时间. 输

Codevs1026 SEARCH(逃跑的拉尔夫 )(BFS)

SEARCH 时间限制: 1 Sec  内存限制: 128 MB提交: 11  解决: 4[提交][状态][讨论版] 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息. 编写程序,通过使用一张小镇的地图帮助警察局找到那辆车.程序必须能表示出该车最终所有可能的位置. 小镇的地图是矩形的,上面的符号用来标明哪儿可以行车哪儿不行.“.”表示小镇上那块地方是可以行

codevs1026 逃跑的拉尔夫

题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息. 编写程序,通过使用一张小镇的地图帮助警察局找到那辆车.程序必须能表示出该车最终所有可能的位置. 小镇的地图是矩形的,上面的符号用来标明哪儿可以行车哪儿不行.“.”表示小镇上那块地方是可以行车的,而符号“X”表示此处不能行车.拉尔夫所开小车的初始位置用字符的“*”表示,且汽车能从初始