• G:献给阿尔吉侬的花束(可能超时)


    G:献给阿尔吉侬的花束

    总时间限制: 
    100ms
     
    内存限制: 
    65536kB
    描述

        阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。

        迷宫用一个R×C的字符矩阵来表示。字符S表示阿尔吉侬所在的位置,字符E表示奶酪所在的位置,字符#表示墙壁,字符.表示可以通行。阿尔吉侬在1个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。

    输入
    第一行是一个正整数T(1 <= T <= 10),表示一共有T组数据。
    每一组数据的第一行包含了两个用空格分开的正整数R和C(2 <= R, C <= 200),表示地图是一个R×C的矩阵。
    接下来的R行描述了地图的具体内容,每一行包含了C个字符。字符含义如题目描述中所述。保证有且仅有一个S和E。
    输出
    对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。每组数据的输出结果占一行。
    样例输入
    3
    3 4
    .S..
    ###.
    ..E.
    3 4
    .S..
    .E..
    ....
    3 4
    .S..
    ####
    ..E.
    样例输出
    5
    1
    oop!


    dfs

    #include <iostream>
    #include<cstring>
    using namespace std;
    char a[13][13];
    int vis[13][13];
    int min1;
    int x1,y1;
    int dfs(int x,int y,int sum){
    if(x==x1&&y==y1){
    if(sum<min1)min1=sum;
    return 0 ;
    }
    if(a[x+1][y]!='#'&&!vis[x+1][y])
    {vis[x+1][y]=1;
    dfs(x+1,y,sum+1);
    vis[x+1][y]=0;
    }
    if(a[x-1][y]!='#'&&!vis[x-1][y])
    {vis[x-1][y]=1;
    dfs(x-1,y,sum+1);
    vis[x-1][y]=0;
    }
    if(a[x][y+1]!='#'&&!vis[x][y+1])
    {vis[x][y+1]=1;
    dfs(x,y+1,sum+1);
    vis[x][y+1]=0;
    }
    if(a[x][y-1]!='#'&&!vis[x][y-1])
    {vis[x][y-1]=1;
    dfs(x,y-1,sum+1);
    vis[x][y-1]=0;
    }

    return 0;
    }
    int main(){
    int t;
    int n,m;
    cin>>t;
    while(t--){
    min1=200;
    memset(vis,0,sizeof(vis));
    cin>>n>>m;
    int x,y;
    for(int i=0;i<=n;i++)
    a[i][0]=a[i][m+1]='#';
    for(int i=0;i<=m;i++)
    a[0][i]=a[n+1][i]='#';
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
    cin>>a[i][j];
    if(a[i][j]=='S')
    {
    x=i,y=j;
    }
    if(a[i][j]=='E')
    {
    x1=i,y1=j;
    }
    }


    dfs(x,y,0);
    vis[x][y]=1;
    if(min1!=200)
    cout<<min1<<endl;
    else cout<<"oop!"<<endl;
    }
    return 0;}

    bfs

  • 相关阅读:
    dblink && 视图 数据库二合一
    oracle mybatis 逆向工程 应当注意的问题
    关于使用vue搭建前后端分离的项目,部署过程遇到的问题
    详解vue静态资源打包中的坑与解决方案
    bootstarap table 分页导出 vue版
    react中两个控件不是父子关系该怎么传递消息或任意控件怎么传递消息
    虚拟DOM中key的作用
    修改Antd的List列表的单个数据行
    移动端开发如何关闭手机键盘
    在一行显示两个数据,左边的数据右对齐,右边的数据左对齐
  • 原文地址:https://www.cnblogs.com/lengxia/p/4469653.html
Copyright © 2020-2023  润新知