博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫问题
阅读量:6001 次
发布时间:2019-06-20

本文共 2609 字,大约阅读时间需要 8 分钟。

http://acm.zznu.edu.cn/problem.php?id=1358

迷宫问题

时间限制: 1 Sec  内存限制: 128 MB

提交: 111  解决: 68
[][]

题目描述

ACM是一个喜欢玩游戏的小孩,他喜欢玩智力游戏,比如最近在玩走迷宫,这是一款超级耗费脑细胞的游戏

和普通的走迷宫一样,游戏是一张迷宫图,其中有一些标记,'W'是墙,'.'是可走的路,起点在左上角,目标点在右下角。ACM从左上角出发,只能向下和向右走,游戏要你找出有多少种不同的走法。很有压力吧?那是对于非计算机专业的人来说!你怎么看?试试吧。

输入

首先输入一个整数T,表示接下来有T(0<T<=10)个测试实例。

每组测试实例第一行是两个整数n(0<n<=10)和m(0<m<=10),表示游戏是在一张n*m的迷宫图上进行,接下来是一个n*m的迷宫图。

具体输入见样例。

输出

每组样例输出一个整数,表示ACM有多少种不同的走法。

具体输出见样例。

样例输入

22 2.w.w3 3...w..... 样例输出
03 代码: #include
int main() {
    int n, m, t, i, j, dp[15][15];     char p[15][15];     scanf("%d", &t);     while(t--)     {
        scanf("%d%d", &n, &m);         for(i = 0; i < n; i++)             scanf("%s", p[i]); // 用字符串的形式输入,因为中间会有换行,还方便         for(i = 0; i <= n; i++)             dp[i][0] = 0;         for(j = 0; j <= m; j++)             dp[0][j] = 0; //清零         dp[0][1] = 1; //没有这一步,没有ac         if(p[0][0] == 'w' || p[n-1][m-1] == 'w')         {
            printf("0\n");             continue; //第一步或最后一步是‘w’,没有走法         }         for(i = 1; i <= n; i++)         {
            for(j = 1; j <= m; j++)             {
                if(p[i-1][j-1] == 'w') // 代码的点:dp下标和地图p下标不是对应的。横竖坐标都错了一个,目的是方便dp加数                     dp[i][j] = 0; //w,即使有别的点到这一步,这一步也到不了其他地方,所以置零                 else                     dp[i][j] = dp[i-1][j] + dp[i][j-1]; //这一点只能由它左边的或上边的点到,所以走法,dp,是它们两个的和             }         }         printf("%d\n", dp[n][m]); // 输出最后一个的dp,不同走法     }     return 0; } 还可以用递归来写:

#include<stdio.h>

#include<iostream>
#include<algorithm>
using namespace std;
#define N 18
int ans, n, m;
char p[N][N];
void f(int x, int y)
{
    if(x < 0 || x >= n || y < 0 || y >= m)
        return ;
    else if(x ==n-1 && y == m-1 && p[x][y] == '.')
    {
        ans++;
        return;
    }
    else if(p[x][y] == '.')
    {
        f(x, y+1);
        f(x+1, y);
    }
    else if(p[x][y] == 'w')
        return ;
}
int main()
{
    int t, i;
    scanf("%d ", &t);
    while(t--)
    {
        scanf("%d%d", &n, &m);
        for(i = 0; i < n; i++)
            scanf("%s", p[i]);
        ans = 0;
        f(0, 0);
        printf("%d\n", ans);
    }
    return 0;
}

之前同学一直都有说我,把worm那题:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31179,弄明白,这题肯定会,我现在也这么觉着。

但是,之前worm我也是明白了的啊,对于自己也是够了

worm代码:

#include
#include
#define maxn 105 int dp[maxn][maxn]; int main() { int i, j, n, p, m, t; while(scanf("%d%d%d%d", &n, &p, &m, &t) != EOF) { memset(dp, 0, sizeof(dp)); dp[0][p] = 1; for(i = 1; i <= m; i++) for(j = 1; j <= n; j++) dp[i][j] += dp[i-1][j-1] + dp[i-1][j+1]; printf("%d\n", dp[m][t]); } return 0; } 相对worm,这题没有出现自己觉着代码一样,ac不了的情况=·=||

这一篇博客真不容易

浏览器又想坏事,先提交了(投诉火狐==|| 试试谷歌orzZ

转载于:https://www.cnblogs.com/Tinamei/p/4466955.html

你可能感兴趣的文章
【转】.so兼容32位和64位
查看>>
PowerDesigner跟表的字段加注释
查看>>
w !sudo tee %
查看>>
javascript面试题:如何把一句英文每个单词首字母大写?
查看>>
URAL 1962 In Chinese Restaurant 数学
查看>>
计算 TPS,QPS 的方式
查看>>
洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
查看>>
群晖NAS使用Docker安装迅雷离线下载出现the active key is not valid.
查看>>
spring boot 2使用Mybatis多表关联查询
查看>>
Making HTTP requests via telnet - Tony's Place
查看>>
千元机市场再添“新宠”,红米Note7和vivo Z3谁才是千元王者
查看>>
荣耀10GT升级EMUI 9.0体验分享:这可能是最好用的手机操作系统
查看>>
ZStack基于华芯通打造ARM国产云平台 助力云上贵州多项应用
查看>>
200本“保护日记”记录黄山迎客松生长变化
查看>>
多方力量携手呵护“中华水塔”青海三江源
查看>>
互联网的下一波红利在哪里?
查看>>
拿姐姐身份证登记结婚竟然成了!婚姻户籍信息共享难在哪儿
查看>>
恒大造车加速,联手柯尼塞格打造顶级新能源车
查看>>
JAVA大神说一个例子让你几分钟学会Annotation
查看>>
富士康要用机器人生产iPhone了?那么多工人怎么办?
查看>>