为什么 DFS 的正确性有误,只能用 BFS?
以下是我的 DFS 暴力,WA了 7 个点
#include <bits/stdc++.h>
#define loop(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef pair<int, int> pa;
const int NN = 5005;
int n, m, Q;
bool able[NN][NN], c[NN], mark[NN][NN], vst[NN][NN];
vector<int> ed[NN][2];
bool DFS(int x, int y) {
if (mark[x][y]) return able[x][y];
mark[x][y] = true;
if (c[x] != c[y]) return able[x][y] = false;
loop(col, 0, 1) {
for (int nx : ed[x][col])
for (int ny : ed[y][col]) {
able[x][y] |= DFS(nx, ny);
if (able[x][y]) return true;
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> Q;
for (int i = 1; i <= n; i++) {
char ch;
cin >> ch;
c[i] = ch - '0';
}
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
ed[u][c[v]].push_back(v);
ed[v][c[u]].push_back(u);
}
for (int i = 1; i <= n; i++)
mark[i][i] = able[i][i] = true;
for (int x = 1; x <= n; x++)
for (int y : ed[x][c[x]])
mark[y][x] = able[y][x] = mark[x][y] = able[x][y] = true;
while (Q--) {
int x, y;
cin >> x >> y;
DFS(x, y) ? cout << "YES\n" : cout << "NO\n";
}
return 0;
}