一个小问题
  • 板块学术版
  • 楼主ImposterAnYu
  • 当前回复23
  • 已保存回复23
  • 发布时间2021/9/18 21:09
  • 上次更新2023/11/4 06:25:31
查看原帖
一个小问题
510555
ImposterAnYu楼主2021/9/18 21:09

为什么这份程序一旦 nn 比较大(比如 n=500n = 500),它就会输出空气?如果将第 2626 行注释掉,将数据读完后甚至还可以继续读入数据……

注:现在已经测试过,n=400n = 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;
}
2021/9/18 21:09
加载中...