TLE!!!

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数组去标记?

对!!