直接转换成最短路

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std; #define INF 0x7fffffff
#define MAXN 510 struct data
{
int v,w,next;
}e[MAXN*MAXN];
int head[MAXN*MAXN];
int cnt; struct edge
{
int to,len;
}p; struct cmp
{
bool operator () (const edge a,const edge b)
{
return a.len > b.len;
}
}; int n,m;
int S,T;
int x1,y1,x2,y2; int dis[MAXN*MAXN],vis[MAXN*MAXN]; char f[MAXN][MAXN]; void link(int u,int v,int w)
{
e[++cnt]=(data){v,w,head[u]};
head[u]=cnt;
} void Dij(int s)
{
priority_queue<edge,vector<edge>,cmp>q;
memset(vis,0,sizeof(vis));
for (int i=1;i<=n;i++)
dis[i]=INF;
dis[s]=0;
vis[s]=1;
for (int i=head[s];i;i=e[i].next)
if (dis[e[i].v]>dis[s]+e[i].w)
{
dis[e[i].v]=dis[s]+e[i].w;
p.to=e[i].v;
p.len=dis[p.to];
q.push(p);
}
for (int i=1;i<=n-1;i++)
{
if (q.empty())
break;
p=q.top();
q.pop();
while (vis[p.to] && !q.empty())
p=q.top(),q.pop();
int x=p.to;
vis[x]=1;
for (int j=head[x];j;j=e[j].next)
if (dis[e[j].v]>dis[x]+e[j].w)
{
dis[e[j].v]=dis[x]+e[j].w;
p.to=e[j].v;
p.len=dis[p.to];
q.push(p);
}
}
} int main()
{
while (scanf("%d%d",&n,&m))
{
if (n+m==0)
break;
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
cnt=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>f[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
if (j<m)
{
if (f[i][j]==f[i][j+1])
link(j+(i-1)*m,j+(i-1)*m+1,0),link(j+(i-1)*m+1,j+(i-1)*m,0);
else
link(j+(i-1)*m,j+(i-1)*m+1,1),link(j+(i-1)*m+1,j+(i-1)*m,1);
}
if (i<n)
{
if (f[i][j]==f[i+1][j])
link(j+(i-1)*m,j+i*m,0),link(j+i*m,j+(i-1)*m,0);
else
link(j+(i-1)*m,j+i*m,1),link(j+i*m,j+(i-1)*m,1);
}
}
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
S=x1*m+y1+1;
T=x2*m+y2+1;
n=n*m;
Dij(S);
printf("%d\n",dis[T]);
}
return 0;
}

  

【bzoj2464】中山市选[2009]小明的游戏的更多相关文章

  1. BZOJ2464: 中山市选[2009]小明的游戏

    2464: 中山市选[2009]小明的游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 280  Solved: 124[Submit][Statu ...

  2. bzoj2464: 中山市选[2009]小明的游戏(最短路)

    2464: 中山市选[2009]小明的游戏 题目:传送门 题解: 最短路的裸题... 代码: #include<cstdio> #include<cstring> #inclu ...

  3. 最短路【bzoj2464】: 中山市选[2009]小明的游戏

    2464: 中山市选[2009]小明的游戏 Description 小明最近喜欢玩一个游戏.给定一个n * m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步 ...

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

    2464 思路: 最短路: 代码: #include <cstdio> #include <cstring> #include <iostream> #includ ...

  5. BZOJ 2463: [中山市选2009]谁能赢呢?

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1887  Solved: 1390[Submit][Sta ...

  6. bzoj 2463 [中山市选2009]谁能赢呢?(博弈)

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1290  Solved: 944[Submit][Stat ...

  7. BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2372  Solved: 1750[Submit][Sta ...

  8. bzoj千题计划169:bzoj2463: [中山市选2009]谁能赢呢?

    http://www.lydsy.com/JudgeOnline/problem.php?id=2463 n为偶数时,一定可以被若干个1*2 矩形覆盖 先手每次从矩形的一端走向另一端,后手每次走向一个 ...

  9. bzoj 2463 [中山市选2009]谁能赢呢? 博弈

    [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3014  Solved: 2165[Submit][Status][D ...

随机推荐

  1. 洛谷——P3907 圈的异或

    P3907 圈的异或 无向图$dfs$找环,并判断边权异或和是否为0 #include<iostream> #include<cstdio> #include<algor ...

  2. POJ - 2955 Brackets (区间DP)

    题目: 给出一个有括号的字符串,问这个字符串中能匹配的最长的子串的长度. 思路: 区间DP,首先枚举区间长度,然后在每一个长度中通过枚举这个区间的分割点来更新这个区间的最优解.还是做的少. 代码: / ...

  3. PermGen space OOM 记录

    前些天线上除出了个OOM问题,今天闲下来记录下: OOM的提示信息是-PermGen space,说明问题出在方法区,方法区存的是什么东西?:类的加载信息.常量.静态变量. 按照方法区的定义:类加载的 ...

  4. AutoEncoders原理

    目录 Auto-Encoders How to Train? Auto-Encoders How to Train?

  5. 使用java发送电子邮件

    经常在账号绑定邮箱或找回密码时,邮箱会收到一条验证邮件,好奇用代码该怎么发送邮件,看到了许多相关的博客,实现步骤都写的很详细,今天照着其他博客的步骤也确实实现了代码发送邮件,在这里重新记录下步骤,加深 ...

  6. Qt项目——数字内容管理系统的参考资料和细节

    打开文件路径,若带空格,要用引号括起路径 LPCWSTR与QString的转换:LPCWSTR strL = strQ.toStdWString().c_str(); 用指定程序打开文件(选择文件的打 ...

  7. HDU-1163Eddy's digital Roots,九余定理的另一种写法!

    下午做了NYOJ-424Eddy's digital Roots后才正式接触了九余定理,不过这题可不是用的九余定理做的.网上的博客千篇一律,所以本篇就不发篇幅过多介绍九余定理了: 但还是要知道什么是九 ...

  8. 动态规划之最长公共子序列(LCS)

             在字符串S中按照其先后顺序依次取出若干个字符,并讲它们排列成一个新的字符串,这个字符串就被称为原字符串的子串          有两个字符串S1和S2,求一个最长公共子串,即求字符串 ...

  9. hdu1978

          {          scanf(          {         scanf(         ;i<n;i++) ;j<m;j++)         scanf(   ...

  10. poj3440--Coin Toss(几何上的概率)

    Coin Toss Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3946   Accepted: 1076 Descrip ...