求救

P3956 [NOIP2017 普及组] 棋盘

这段代码的问题可能在于以下几点: 1. 在输入数据时,题目中给出的是“第i行第j列”,但是你的输入方式是“第x行第y列”,需要注意一下。 2. 在 dfs 函数中,你的第一个判断条件是“vis[x][y]>vis[m][m]”,但是这个条件并没有什么意义,因为你并没有对 vis 数组进行初始化,所以 vis[m][m] 的值是随机的,可能是 INF,也可能是其他值。正确的判断条件应该是“vis[x][y]>=vis[m][m]”。 3. 在 dfs 函数中,你的第二个判断条件是“!mapp[ax][ay] && vis[x][y]+2 < vis[ax][ay] && mapp[x][y]”,但是这个条件有问题。首先,你应该先判断 vis[x][y]+2 是否小于 vis[ax][ay],再判断 mapp[x][y] 是否为 1。其次,你应该判断 mapp[ax][ay] 是否为 0,而不是 !mapp[ax][ay]。因为 mapp 数组中可能存在其他值,不一定是 0 或 1。 4. 在 dfs 函数中,你的第三个判断条件是“(mapp[ax][ay] != mapp[x][y]) && vis[x][y]+1 < vis[ax][ay]”,但是这个条件也有问题。首先,你应该先判断 vis[x][y]+1 是否小于 vis[ax][ay],再判断 mapp[ax][ay] 是否不等于 mapp[x][y]。其次,你应该判断 mapp[ax][ay] 是否为 0,而不是 !mapp[ax][ay]。 5. 在 dfs 函数中,你的第二个和第三个判断条件都没有考虑 vis[ax][ay] 是否已经被更新过,如果已经被更新过,就不需要再进行 dfs 了,这样可以减少不必要的递归次数。 6. 在 dfs 函数中,你没有对 vis 数组进行初始化,应该将 vis 数组的所有元素初始化为 INF。 7. 在 dfs 函数中,你没有判断当前位置是否越界,应该加上这个判断条件。
by lihefan @ 2023-05-22 08:02:48


chatGBT?
by zhzkiller @ 2023-05-22 10:36:41


@[lihefan](/user/896463) 其实copy chatgpt也不是不行,但请先看看是否符合逻辑啊喂
by SXqwq @ 2023-05-22 21:11:39


找到问题了,dfs必须要传递一个染色值,不然无法处理使用魔法 ~~wssb~~
by SXqwq @ 2023-05-22 22:15:00


@[lihefan](/user/896463) >在输入数据时,题目中给出的是“第i行第j列”,但是你的输入方式是“第x行第y列”,需要注意一下。 离谱
by MrPython @ 2023-05-23 11:55:43


|