洛谷p1141 01迷宫
这道题提交了好多遍终于A了,bfs和dfs都提交好几遍都过不了(各种细节和输入的问题),必须单独开一篇博客来叨叨。
首先这道题的搜索并不难,但是要注意细节,他问的是能到达的格子(包括自身),一开始我以为包括自身是走了一圈回来再到达所以我vis一开始没有赋值而且ans是赋值为0,其实是站在那里就算是一个了,所以开始bfs之vis[x][y]要赋值为true(即已访问),然后ans赋值为1.
然后是最难的一个点,就是询问的次数,这道题询问的次数多达100000,如果每一次询问再暴力搜索肯定是超时的,所以要用记忆化搜索,在每一次bfs搜索时用一个vector数组存放经过的点(联通点),而这些联通点能到达格子的个数是相同的,只要在一次搜索之后将最后到达格子个数的值赋给这些点,然后在每一次询问时,看看该点是否访问过,如果没有访问过就再搜索一次最后输出值。
还有这道题的输入,我一开始是这样输入的,然后就一直过不了(因为自己电脑测试例子也是正确的,所以没想到是这里出错)
char ch ;
scanf ("%d%d",&n,&m) ;
getchar() ;
for (int i = 1 ; i <= n ; i ++){
for (int j = 1 ; j <= n ; j ++){
ch = getchar() ;
maze[i][j] = ch - '0' ;
}
getchar() ;
}
要改成这样
scanf ("%d%d",&n,&m) ;
for (int i = 1