题解 | #数芝麻#

数芝麻

https://ac.nowcoder.com/acm/problem/14591

很奇怪的题

每次出错在dfs里面,离谱
看了题解 觉得自己没错 写的代码对的 很夸张 提交了4页半
离谱 不是很理解为什么要一定sum==m >=m就不行

#include<cstring>
#include<cmath>
using namespace std;
int g[105][105];
int used[105][105];
int n,m,maxi=-1;
int sum;
int flag=0;
void dfs(int i,int j){
        if(i-1>=1&&!used[i-1][j]) {
            used[i-1][j]=1;
            sum+=g[i-1][j];//每一行要是写成sum++ 就是错误的
            dfs(i-1,j);
        }
        if(i+1<=n&&!used[i+1][j]) {
            used[i+1][j]=1;
            sum+=g[i+1][j];
            dfs(i+1,j);
        }
        if(j-1>=1&&!used[i][j-1]) {
            used[i][j-1]=1;
            sum+=g[i][j-1];
            dfs(i,j-1);
        }
        if(j+1<=n&&!used[i][j+1]) {
            used[i][j+1]=1;
            sum+=g[i][j+1];
            dfs(i,j+1);
        }
    //return;
}
int main(){
    while(cin >>n >>m){
        if(n==0&&m==0){
            break;
        }
        flag=0;
        memset(used,0,sizeof(used));
        for(int i =1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin >> g[i][j];
                if(g[i][j]==0) used[i][j]=1;
            }
        }
        for(int i =1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(!used[i][j]){
                    used[i][j]=1;
                    sum=g[i][j];
                    dfs(i,j);
                    maxi=max(maxi,sum);
                    //cout<<sum<<endl;
                    if(m == sum) flag=1;
                }
            }
        }
        if(flag) cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}
全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务