码迷,mamicode.com
首页 > 其他好文 > 详细

HDU5094【BFS+状态压缩】

时间:2014-11-03 22:12:50      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   for   sp   

bubuko.com,布布扣
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int NO=56;
const int INF=1000000000;
struct X
{
    int x,y;
    int key;
}dir[]={{-1,0}/*&iexcl;ü*/,{0,1}/*&iexcl;ú*/,{1,0}/*&iexcl;&yacute;*/,{0,-1}/*&iexcl;&ucirc;*/},a,b;
int n,m,q;
int MAP[NO][NO][NO][NO];
int key[NO][NO];
int step[NO][NO][1024];
void reset_step()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=0;k<1<<q;k++)
                step[i][j][k]=INF;
}
int bfs()
{
    reset_step();
    queue<X> t;
    a.x=a.y=1;
    a.key=0;
    step[a.x][a.y][a.key]=0;
    t.push(a);
    while(!t.empty())
    {
        a=t.front();
        t.pop();
        if(a.x==n&&a.y==m)
            return step[a.x][a.y][a.key];
        for(int i=0;i<4;i++)
        {
            b.x=a.x+dir[i].x;
            b.y=a.y+dir[i].y;
            if((MAP[a.x][a.y][b.x][b.y]&a.key)==MAP[a.x][a.y][b.x][b.y])
            {
                b.key=a.key|key[b.x][b.y];
                if(step[b.x][b.y][b.key]==INF)
                {
                    step[b.x][b.y][b.key]=step[a.x][a.y][a.key]+1;
                    t.push(b);
                }
            }
        }
    }
    return -1;
}
int main()
{
    while(scanf("%d%d%d",&n,&m,&q)==3)
    {
        for(int i=1;i<=n;i++)
        {
            MAP[i][0][i][1]=MAP[i][1][i][0]=1<<q;
            MAP[i][m][i][m+1]=MAP[i][m+1][i][m]=1<<q;
        }
        for(int j=1;j<=m;j++)
        {
            MAP[0][j][1][j]=MAP[1][j][0][j]=1<<q;
            MAP[n][j][n+1][j]=MAP[n+1][j][n][j]=1<<q;
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                key[i][j]=0;
                for(int x=1;x<=n;x++)
                    for(int y=1;y<=m;y++)
                        MAP[i][j][x][y]=MAP[x][y][i][j]=0;
            }
        int k;
        scanf("%d",&k);
        int a,b,c,d,e;
        while(k--)
        {
            scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
            if(e==0)
                e=1<<q;
            else
                e=1<<(e-1);
            MAP[a][b][c][d]=MAP[c][d][a][b]=e;
        }
        scanf("%d",&k);
        while(k--)
        {
            scanf("%d%d%d",&a,&b,&c);
            key[a][b]|=1<<(c-1);
        }
        printf("%d\n",bfs());
    }
    return 0;
}
View Code

 

HDU5094【BFS+状态压缩】

标签:style   blog   http   io   color   ar   os   for   sp   

原文地址:http://www.cnblogs.com/Lnizei/p/4072125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!