node(tx,ty,now.t+1)
1 个赞
好吧
1 个赞
这是c语言的强转,在此此程序的作用是将新节点强行转化为node类型,放入队列
1 个赞
我用dfs做出来啦!
1 个赞
思路还是一样
但是不需要用vis数组
如果路程比体力多,那么肯定不行,直接Return
AC代码:
#include <bits/stdc++.h>
using namespace std;
int ans,cnt,t;
char mp[255][255];
int n,m,st1,st2,de1,de2;
int dx[5]={0,-1,0,1};
int dy[5]={-1,0,1,0};
void bfs(int x,int y,int step)
{
if(step==t){
if(x==de1&&y==de2){
ans++;
}
return ;
}
if(step+abs(x-de1)+abs(y-de2)>t) return ;//如果路程比体力多,那么肯定不行,直接Return
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&mp[xx][yy]=='.'){
bfs(xx,yy,step+1);
}
}
}
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
cin>>st1>>st2>>de1>>de2;
bfs(st1,st2,0);
cout<<ans;
return 0;
}
1 个赞
哦!
1 个赞
我也做出来了
所以错误是在你用vis数组去标记?
对!!