那就奇怪了。。
1 个赞
你可以尝试下
2 个赞
更低了
我也20了。。
1 个赞
所以简直到底咋写呢
2 个赞
emm
把你中间的
if(nx<1||nx>n||ny<1||ny>m||mp[nx][ny]=='*'||vis[nx][ny])
{
continue;
}
vis[nx][ny]=1;
step++;
dfs(nx,ny);
vis[nx][ny]=0;
改成了
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&mp[nx][ny]=='.'&&!vis[nx][ny])
{
vis[nx][ny]=1;
step++;
dfs(nx,ny);
vis[nx][ny]=0;
}
但是还是没过
1 个赞
666
2 个赞
#include<bits/stdc++.h>
using namespace std;
int n,m,t,cnt;
char a[101][101];
struct node{
int x,y,t;
node(){};
node(int xx,int yy,int tt){
x=xx,y=yy,t=tt;
}
}st,ed;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}},f[55][55][22];
void bfs(node s){
queue<node> q;
q.push(s);
while(!q.empty()){
node now=q.front();
q.pop();
if(now.t>ed.t)
return;
for(int i=0;i<4;i++){
int tx=now.x+dir[i][0],ty=now.y+dir[i][1];
if(a[tx][ty]=='.'){
node v=node(tx,ty,now.t+1);
if(abs(v.x-ed.x)+abs(v.y-ed.y)>t-v.t)continue;
f[tx][ty][now.t+1]+=f[now.x][now.y][now.t];
if(f[tx][ty][now.t+1]-f[now.x][now.y][now.t]>0)continue;
q.push(v);
}
}
}
return;
}
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int a,b,c,d;
cin>>a>>b>>c>>d;
f[a][b][0]=1;
st=node(a,b,0);
ed=node(c,d,t);
bfs(st);
cout<<f[c][d][t]<<endl;
return 0;
}
这是我的思路,有用给个解决方案吧
(仅供参考)
1 个赞
额我就是用的这个
1 个赞
bfs+记忆化
他说不行
1 个赞
所以解决方案给谁
1 个赞
给我呗
2 个赞
6~
1 个赞
谢谢你
1 个赞
bfs的复杂度跟dfs一样吧,而且bfs一般是求最短路径,而dfs一般是求方案总数
1 个赞
这题求的就是方案数
1 个赞
可是bfsAC了
1 个赞
我知道啊
1 个赞
这种啥意思
1 个赞
