为什么这份程序一旦 n 比较大(比如 n=500),它就会输出空气?如果将第 26 行注释掉,将数据读完后甚至还可以继续读入数据……
注:现在已经测试过,n=400 时程序还是会正常输出的。
#include<bits/stdc++.h>
using namespace std;
int n,a[1005][1005],i,j,s,t = 1145141919,dx[4] = {-1,1},dy[4] = {0,0,-1,1},k;
bool b[1005][1005];
void anyu(int x,int y,int m,int l){
if(x == n && y == n && l <= k){
t = min(t,s);
return ;
}
if(max(x,y) <= n && min(x,y) >= 1 && !b[x][y] && l <= k){
b[x][y] = 1;
s++;
for(int i = 0; i <= 3; i++){
if(i == m){
anyu(x + dx[i] * a[x][y],y + dy[i] * a[x][y],i,l + 1);
}else{
anyu(x + dx[i] * a[x][y],y + dy[i] * a[x][y],i,1);
}
}
s--;
}
return ;
}
int main(){
ios::sync_with_stdio(false);
freopen("8.in","r",stdin);
//freopen("8.out","w",stdout);
cin >> n >> k;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
cin >> a[i][j];
}
}
anyu(1,1,3,0);
anyu(1,1,2,0);
cout<< (t == 1145141919? -114514 : t) << endl;
return 0;
}