萌新。。刚学oi。。搜索怎么写,求

P1605 迷宫

为什么当 $(kx,ky)$ 可以走的时候被标记的是 $b_{p,q}$
by ImposterAnYu @ 2022-10-10 19:55:26


@[owo_ImposterAnYu_owo](/user/510555) 改后还是0分(悲)
by wway @ 2022-10-10 20:00:48


@[wway](/user/602960) 注意边界,$kx,ky$ 还要小于等于 $n,m$。
by ccchl42 @ 2022-10-10 20:03:13


@[wway](/user/602960) 你的 $a$ 数组下标从 $0\sim 9$,初始化的时候不能 $i<=10$,越界了。
by ccchl42 @ 2022-10-10 20:04:24


@[chlchl](/user/765281) 问题是当 $kx > n$ 或 $ky > m$ 的时候,$a_{kx,ky} = 1$,一样不会进行遍历啊
by ImposterAnYu @ 2022-10-10 20:06:27


@[owo_ImposterAnYu_owo](/user/510555) 初始化的时候越界了,下标没有 $10$,其实这应该是 RE。
by ccchl42 @ 2022-10-10 20:08:14


@[chlchl](/user/765281) 似乎不是 RE 的问题
by ImposterAnYu @ 2022-10-10 20:09:11


@[wway](/user/602960) 帮您改了一下,现在能过了 ```c++ #include<bits/stdc++.h> int a[50][50]; int n,m,t,ans=0,ax,ay,bx,by,cx,cy; bool b[50][50];//走 int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; void dfs(int p,int q) { if(p==bx && q==by) { ans++; return; } else { b[p][q]=1; for(int i=0;i<=3;i++) { int kx=p+dx[i]; int ky=q+dy[i]; if(kx>=1 && ky>=1 && kx<=n && ky<=m && a[kx][ky]==0 && b[kx][ky]==0) { dfs(kx,ky); } } } b[p][q]=0; } int main() { std::cin>>n>>m>>t; std::cin>>ax>>ay>>bx>>by; for(int i=1;i<=t;i++) { std::cin>>cx>>cy; a[cx][cy]=1; } dfs(ax,ay); std::cout<<ans; return 0; } ```
by ImposterAnYu @ 2022-10-10 20:09:55


@[owo_ImposterAnYu_owo](/user/510555) 谢谢大佬,我调出来了 ``` #include<bits/stdc++.h> int a[10][10]; int n,m,t,ans=0,ax,ay,bx,by,cx,cy; bool b[15][15];//走 int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; void dfs(int p,int q) { if(p==bx && q==by) { ans++; return; } else { for(int i=0;i<=3;i++) { int kx=p+dx[i]; int ky=q+dy[i]; if(kx>=1 && ky>=1 && kx<=n && ky<=m && a[kx][ky]==0 && b[kx][ky]==0) { b[kx][ky]=1; dfs(kx,ky); b[kx][ky]=0; } } } } int main() { std::cin>>n>>m>>t; std::cin>>ax>>ay>>bx>>by; for(int i=1;i<=t;i++) { std::cin>>cx>>cy; a[cx][cy]=1; } a[ax][ay]=1; dfs(ax,ay); std::cout<<ans; return 0; } ```
by wway @ 2022-10-10 20:18:47


|