WA#10,求助

P2083 找人

@[XingChen_MoNian](/user/920938) ```cpp #include<iostream> using namespace std; int a[1005][105],b[1005][105],n,m,v,x,y,ans=2e9; bool f=0; int dfs(int idx,int idy,int anss,int s){ if(idx==x && idy==y){ f=1; return anss; } if(s>n*m) return (int)2e9; return dfs(a[idx][idy],b[idx][idy],anss+abs(a[idx][idy]-idx)*v,s+1);; } int main(){ cin>>n>>m>>v>>x>>y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]>>b[i][j]; for(int i=1;i<=m;i++){ ans=min(ans,dfs(1,i,0,0)); } if(!f) cout<<"impossible"; else cout<<ans; return 0; ## } ```
by weak_in_code @ 2024-04-07 21:22:29


好像多打了两个#。
by weak_in_code @ 2024-04-07 21:22:58


@[weak_in_code](/user/753640) 不小心的,嘻嘻
by XingChen_MoNian @ 2024-04-07 21:25:19


wait@[XingChen_MoNian](/user/920938)
by weak_in_code @ 2024-04-07 21:28:58


我刚想了一下,因为这个递归函数没有什么分叉,从理论上来说是可以对的: ```cpp #include<iostream> #include<cmath> using namespace std; int a[1005][105],b[1005][105],n,m,v,x,y,ans=2e9,anss; bool f=0; int dfs(int idx,int idy,int s){ if(idx==x && idy==y){ f=1; return anss; } if(s>n*m) return (int)2e9; anss+=abs(a[idx][idy]-idx)*v; return dfs(a[idx][idy],b[idx][idy],s+1); } int main(){ cin>>n>>m>>v>>x>>y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]>>b[i][j]; for(int i=1;i<=m;i++){ anss=0; ans=min(ans,dfs(1,i,0)); } if(!f) cout<<"impossible"; else cout<<ans; return 0; } ```
by weak_in_code @ 2024-04-07 21:29:36


这份代码是对的,确实可以这么写。
by weak_in_code @ 2024-04-07 21:30:29


@[weak_in_code](/user/753640) 在我源代码上改了半天,发现根本原因好像是dfs的返回值
by XingChen_MoNian @ 2024-04-07 21:33:05


@[XingChen_MoNian](/user/920938) 正确的,应该是`return dfs(a[idx][idy],b[idx][idy],s+1)`
by weak_in_code @ 2024-04-07 21:33:50


@[XingChen_MoNian](/user/920938) 上面那份代码是写在外面的正确代码,没有分叉的dfs好像确实可以这么写
by weak_in_code @ 2024-04-07 21:35:13


谢谢大佬 膜拜,必须膜拜
by XingChen_MoNian @ 2024-04-07 21:35:14


| 下一页