您的位置:首页 > 其它

NYOJ ~ 58 ~ 最小步数(BFS)

2018-04-01 16:00 351 查看
代码如下:#include<bits/stdc++.h>  
using namespace std;  
const int MAXN = 15;  
struct Node  
{  
    int x,y,steps;  
}NOW,NEXT;  
int MAP[9][9]={   
 1,1,1,1,1,1,1,1,1,  
 1,0,0,1,0,0,1,0,1,  
 1,0,0,1,1,0,0,0,1,  
 1,0,1,0,1,1,0,1,1,  
 1,0,0,0,0,1,0,0,1,  
 1,1,0,1,0,1,0,0,1,  
 1,1,0,1,0,1,0,0,1,  
 1,1,0,1,0,0,0,0,1,  
 1,1,1,1,1,1,1,1,1};  
int sx,sy,ex,ey;  
int dir[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};  
bool vis[15][15];  
int bfs()  
{  
    memset(vis,0,sizeof(vis));  
    NOW.x = sx; NOW.y = sy; NOW.steps = 0; vis[sx][sy] = true;  
    queue<Node> q;  
    q.push(NOW);  
    while(!q.empty())  
    {  
        NOW = q.front();  
        if(NOW.x  == ex && NOW.y == ey) return NOW.steps;  
        q.pop();  
        for(int i = 0; i < 4; i++)  
        {  
            int X = NOW.x + dir[i][0], Y = NOW.y + dir[i][1];  
            if(X >= 0 && Y >= 0 && X < 9 && Y < 9 && vis[X][Y] == false && MAP[X][Y] == 0)  
            {  
                vis[X][Y] = true;  
                NEXT.x = X; NEXT.y = Y; NEXT.steps = NOW.steps + 1;  
                q.push(NEXT);  
            }  
        }  
    }  
    return 0;  
}  
int main()  
{  
    int T;  
    cin>>T;  
    while(T--)  
    {  
        cin>>sx>>sy>>ex>>ey;  
        cout<<bfs()<<endl;  
    }  
    return 0;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: