题解:P11580 [CCC2020] Escape Room

搜索。

对于每个位置 \((i, j)\),让 \(i \times j\)\(num_{i, j}\) 连一条边,所以起点为 \(1\),终点为 \(n \times m\)

然后 bfs/dfs 即可。

\(n\)\(m\) 别搞反了,不然喜获 \(77\) pts。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;      
int m, n;
bool f[1000005];
vector<int> vc[1000005];
void bfs(){
	queue<int> q;
	q.push(1);
	f[1] = 1;
	while(q.size()){
		int fr = q.front();
		q.pop();
		for(int i = 0; i < vc[fr].size(); i++){
			int v = vc[fr][i];
			if(f[v]) continue;
			f[v] = 1;
			q.push(v);
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> m >> n;
	for(int i = 1; i <= m; i++){
		for(int j = 1; j <= n; j++){
			int num;
			cin >> num;
			vc[i * j].push_back(num);
		}
	}
	bfs();
	if(f[n * m]) cout << "yes";
	else cout << "no";
	return 0;
}
posted @ 2025-07-21 12:53  KukCair  阅读(5)  评论(0)    收藏  举报