84pts实在调不出来了
查看原帖
84pts实在调不出来了
1013950
__youzimo2014__楼主2024/11/24 11:14
#include <bits/stdc++.h>
using namespace std;

int w[20][20], visval[20][20], viscal[20][20];

int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};

struct Nod{
	int x, y, val, cal;
	Nod(int x_, int y_, int val_, int cal_) {
		x = x_;
		y = y_;
		val = val_;
        cal = cal_;
	}
};

int main() {
	memset(viscal, 127, sizeof(viscal));
	int n, m;
	cin >> n >> m;
	int begin_x, begin_y, ans = 2000000000;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> w[i][j];
			if (w[i][j] == 2) {
				begin_x = i;
				begin_y = j;
			}
		}
	}
	queue<Nod> q;
    q.push(Nod(begin_x, begin_y, 6, 0));
	while (!q.empty()) {
        Nod ___ = q.front(); q.pop();
		auto x = ___.x, y = ___.y, val = ___.val, cal = ___.cal;
        if (x < 1 || x > n || y < 1 || y > m) continue;
		if (val == 0) continue;
        if (w[x][y] == 0) continue;
        if (w[x][y] == 3) {
            ans = min(cal, ans);
            continue;
        }
		
		if (w[x][y] == 4) {
            val = 6;
        }
        if (cal >= viscal[x][y] && val <= visval[x][y]) continue;
        viscal[x][y] = cal;
        visval[x][y] = val;
        for (int k = 0; k < 3; k++) {
        	int new_x = x + dx[k], new_y = y + dy[k];
        	q.push(Nod(new_x, new_y, val-1, cal+1));
		}
	}
	if (ans != 2000000000) cout << ans << endl;
	else cout << -1 << endl;
	return 0;
}

WA on #10 #12

#10数据:

8 4
3 1 1 1
1 1 1 0
1 1 1 1
0 1 1 2
1 4 4 1
1 4 0 1
1 0 1 1
1 0 1 1

应该输出 44,我的代码报告无解(输出 1-1)。

2024/11/24 11:14
加载中...