HDU - 2612 bfs加打表

 

打表预处理会降低复杂度,如果每次找一个'@'都跑一次bfs的话会超时;

#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;
const int maxn=209;
int n,m;

int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

char a[maxn][maxn];//图;
int flag[maxn][maxn];

struct Node{
    int x,y;
}s1,s2,dnode;//s1表示Y位置,s2表示M位置,dnode表示移动后的位置;

int check(int i,int j){
    if(i>=0&&i=0&&jq;
void bfs(Node st,int fff){
    memset(flag,0,sizeof(flag));
    while(!q.empty())
        q.pop();
    flag[st.x][st.y]=1;
    q.push(st);
    while(!q.empty()){
        Node tan1=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            dnode.x=tan1.x+dx[i];
            dnode.y=tan1.y+dy[i];
            if(check(dnode.x,dnode.y)){
                flag[dnode.x][dnode.y]=1;
                step[dnode.x][dnode.y][fff]=step[tan1.x][tan1.y][fff]+1;
                q.push(dnode);

            }

        }
    }
}

int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        memset(step,0,sizeof(step));
        for(int i=0;i

 

你可能感兴趣的:(ACM)