洛谷P1101 单词方阵(dfs考细心的题)

题目来源:https://www.luogu.com.cn/problem/P1101

bool bfs(int x, int y, int idx,int fx) { if (idx == 6) { return true; } if (fx == -1) { for (int i = 0; i < 8; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 0 && nx < n && ny >= 0 && ny < n && mp[nx][ny] == mb[idx + 1]) { if (bfs(nx, ny, idx + 1,i)) { ans[nx][ny] = idx + 1; return true; } } } } else { int nx = x + dx[fx]; int ny = y + dy[fx]; if (nx >= 0 && nx < n && ny >= 0 && ny < n && mp[nx][ny] == mb[idx + 1]) { if (bfs(nx, ny, idx + 1, fx)) { ans[nx][ny] = idx + 1; return true; } else { return false; } } } return false; }

(注:虽然代码写的bfs但是实际上是dfs)
思路:非常简单的题本来以为是度假,没想到花了一次看测试点的机会……
debug:错误点是fx==-1的分支,本来是
if (nx >= 0 && nx < n && ny >= 0 && ny < n && mp[nx][ny] == mb[idx + 1]) { if (bfs(nx, ny, idx + 1,i)) { ans[nx][ny] = idx + 1; return true; }else{ return false;} }
问题出在return false,一个不过直接全砍掉了,就没有达到把8个方向全遍历一次的目的,(for循环摆设了)

posted @ 2025-07-23 10:44  yubai111  阅读(13)  评论(0)    收藏  举报