EOJ-大学生程序设计邀请赛(华东师范大学)-C-袋鼠妈妈找孩子

题目描述:

袋鼠妈妈找不到她的孩子了。她的孩子被怪兽抓走了。

袋鼠妈妈现在在地图的左上角,她的孩子在地图第 行第 列的位置。怪兽想和袋鼠妈妈玩一个游戏:他不想让袋鼠妈妈过快地找到她的孩子。袋鼠妈妈每秒钟可以向上下左右四个方向跳一格(如果没有墙阻拦的话),怪兽就要在一些格子中造墙,从而完成一个迷宫,使得袋鼠妈妈能够找到她的孩子,但最快不能小于 秒。

请设计这样一个迷宫。

Input

第一行两个整数 ,表示地图的总行数和总列数。

第二行三个整数

Output

输出一个地图,应正好 列。

表示空地,用表示墙。袋鼠妈妈所在的位置和孩子所在的位置用表示。

数据保证有解。

Examples

Input

2 6

1 3 4

Output

.*.***

......

Source

2017 华东师范大学网赛

题解:

DFS搜索一遍就ok了。需要注意的是避免绕路的情况,保证两点间最短距离>=k,判断一个点可不可以走除了这个点没走过以及这个点在n*m地图中外,还有这个点上下左右已走过的点的数量<2,很有意思的一道题目。

CODE:

#include<bits/stdc++.h>

using namespace std;

int n,m,x,y,k,vis[9][9];

char g[11][11];

int go[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

int check(int a,int b)

{

    if(a>=0&&a<n&&b>=0&&b<m) return 1;

    return 0;

}

int dfs(int a,int b,int num)

{

    int t=0;

    for(int i=0;i<4;i++){

        int nx=a+go[i][0],ny=b+go[i][1];

        if(check(nx,ny))

            t+=vis[nx][ny];

    }

    if(t>=2) return 0;

    if(a==x&&b==y){

        if(num>=k) return 1;

        return 0;

    }

    for(int i=0;i<4;i++){

        int nx=a+go[i][0];

        int ny=b+go[i][1];

        if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny]){

            vis[nx][ny]=1;

            g[nx][ny]='.';

            if(dfs(nx,ny,num+1)) return 1;

            g[nx][ny]='*';

            vis[nx][ny]=0;

        }

    }

    return 0;

}

int main()

{

    while(~scanf("%d%d%d%d%d",&n,&m,&x,&y,&k)){

        memset(g,'*',sizeof(g));

        memset(vis,0,sizeof(vis));

        vis[0][0]=1;

        g[0][0]='.';

        x--;y--;

        dfs(0,0,0);

        for(int i=0;i<n;i++){

            for(int j=0;j<m;j++) printf("%c",g[i][j]);

            puts("");

        }

    }

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值