AC日记——中山市选[2009]小明的游戏 bzoj 2464

2464

 

思路:

  最短路;

 

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

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

int n,m,sx,sy,ex,ey,dis[1005][1005];
int quex[1000005],quey[1000005];

char map[1005][1005];

bool if_[1005][1005];

int main()
{
    scanf("%d%d",&n,&m);
    while(n!=0&&m!=0)
    {
        for(int i=1;i<=n;i++) scanf("%s",map[i]+1);
        scanf("%d%d%d%d",&sx,&sy,&ex,&ey);sx++,sy++,ex++,ey++;
        int h=0,tail=1;memset(dis,0x7f,sizeof(dis)),memset(if_,false,sizeof(if_));
        quex[0]=sx,quey[0]=sy,dis[sx][sy]=0,if_[sx][sy]=true;
        while(h<tail)
        {
            int x=quex[h],y=quey[h++],xx,yy,w;
            if_[x][y]=false;
            for(int v=1;v<=4;v++)
            {
                xx=x+dx[v],yy=y+dy[v];
                if(xx>0&&xx<=n&&yy>0&&yy<=m)
                {
                    w=(map[xx][yy]==map[x][y]?0:1);
                    if(dis[x][y]+w<dis[xx][yy])
                    {
                        dis[xx][yy]=dis[x][y]+w;
                        if(!if_[xx][yy]) if_[xx][yy]=true,quex[tail]=xx,quey[tail++]=yy;
                    }
                }
            }
        }
        printf("%d\n",dis[ex][ey]);
        scanf("%d%d",&n,&m);
    }
    return 0;
}

 

posted @ 2017-05-17 16:46  IIIIIIIIIU  阅读(215)  评论(0编辑  收藏  举报