很奇怪的题
每次出错在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;
}