社区讨论

DFS 90pts 求助!

P114101迷宫参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@loilfkvx
此快照首次捕获于
2023/11/03 20:30
2 年前
此快照最后确认于
2023/11/03 21:39
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n, m, ans[1010][1010], ans1[1010], a[1010][1010];
bool vis[1010][1010];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
bool isok(int x) {
	if(x > n || x < 1) return 0;
	return 1;
}
int dfs(int x, int y, int bj) {
    ans[x][y] = bj;
    if(vis[x][y]) return 0;
    int ans2 = 1;
    vis[x][y] = 1;
    for(int k = 0; k < 4; k++) {
    // 	cout << isok(x + dx[k]) << isok(y + dy[k]) << (!a[x][y] == a[x + dx[k]][y + dy[k]]) << '\n';
        if(isok(x + dx[k]) && isok(y + dy[k]) && !a[x][y] == a[x + dx[k]][y + dy[k]])
            ans2 += dfs(x + dx[k], y + dy[k], bj);    	
	}
    return ans2;
}
int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++) {
            scanf("%1d", &a[i][j]);
//			printf("%1d %d %d\n", a[i][j], i, j);    	
		}
    for(int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        if(!ans[x][y]) ans1[i] = dfs(x, y, i);
        cout << ans1[ans[x][y]] << '\n';
    }
    return 0;
}
WA on #2
CPP

回复

3 条回复,欢迎继续交流。

正在加载回复...