有道大毒瘤(被卡),有思路私聊QwQ

一道有趣的题

提交(Submit)

中文 切换语言(Change Language)

时间:1s 空间:32M

题目描述:

你正在设计一个网格地图游戏,网格满足如下条件

1:恰好有一个出口

2:可能有一些门,门的标号为大写字母A-Z,每种门最多只有一个

3:可能有一些钥匙,钥匙的标号为小写字母a-z,每种钥匙只能打开对应的大写字母的门

4:可能有一些空地,空地的标号为小数点

5:可能有一些障碍,障碍不能经过

对于一个地图,你想要知道有多少的空地可以到达出口,为了使游戏显得不那么简单,你想要知道到达出口至少开一扇门的的空地有多少个

输入格式:

第一行输入两个整数n,m, (1≤n≤50)

接下来n行每行输入m个字符 (1≤m≤50)

‘.’ 代表空地

‘#’ 代表障碍

'*'代表出口

输出格式:

输出一个整数

样例输入1:

6 7 …#.A. .#B#.#. .#.#.#. .#.#.#. .#b#.#. a#…#*

样例输出1:

10

样例输入2:

3 5 a#a#* #…#. a…A.

样例输出2:

4

提示

以下是WA20代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int vis[51][51],b[55],ans,flag=0,c,d,n,m;
char a[55][55];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y){
	if(x==c&&y==d&&flag==1){
	    ans++;
	    return ;
	}
    vis[x][y]=1;
    for(int i=0;i<4;i++){
		int tx=dx[i]+x;
		int ty=dy[i]+y;
		if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&a[tx][ty]!='#'&&vis[tx][ty]!=1){
            if(a[tx][ty]>='A'&&a[tx][ty]<='Z'){
                if(b[a[tx][ty]-'0'-16]>=1){
                	vis[tx][ty]=1;
					flag=1;
                    dfs(tx,ty);
                }
            }
            else if(a[tx][ty]>='a'&&a[tx][ty]<='b'){
            	b[a[tx][ty]-'0'-48]+=1;
			    vis[tx][ty]=1;
                dfs(tx,ty);
            }
            else{
            	vis[tx][ty]=1;
                dfs(tx,ty);
            }
		}
	}
	vis[x][y]=0;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]=='*'){
                c=i,d=j;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]!='#'){
            	memset(b,0,sizeof b);
				if(a[i][j]>='a'&&a[i][j]<='b'){
	            	b[a[i][j]-'0'-48]+=1;
	            }
            	flag=0;
                for(int x=1;x<=n;x++){
                    for(int y=1;y<=m;y++){
                        vis[x][y]=0;
                    }
                }
                dfs(i,j);
            }
        }
    }
    cout<<ans*2;
}
3 个赞

感谢管理员不删帖(好像是费话)

@金伟伦

快发帖