很奇怪的题

每次出错在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;
}