【中山市选2009】【BZOJ2464】小明的游戏
来源:互联网 发布:易观大数据官网 编辑:程序博客网 时间:2024/05/01 12:52
Description
小明最近喜欢玩一个游戏。给定一个n * m的棋盘,上面有两种格子#和@。游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格。如果移动到同一类型的格子,则费用是0,否则费用是1。请编程计算从起始位置移动到目标位置的最小花费。
Input
输入文件有多组数据。
输入第一行包含两个整数n,m,分别表示棋盘的行数和列数。
输入接下来的n行,每一行有m个格子(使用#或者@表示)。
输入接下来一行有四个整数x1, y1, x2, y2,分别为起始位置和目标位置。
当输入n,m均为0时,表示输入结束。
Output
对于每组数据,输出从起始位置到目标位置的最小花费。每一组数据独占一行。
Sample Input
2 2
@#
#@
0 0 1 1
2 2
@@
@#
0 1 1 0
0 0
Sample Output
2
0
HINT
对于100%的数据满足:1 < = n, m <= 500。
Source
刚睡觉起来没多久太困了QAQ
写个傻逼题提神一下
傻逼最短路
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<algorithm>#define MAXN 250100using namespace std;int n,m;char c[510][510];int top,Num,num[510][510],dis[MAXN];bool vis[MAXN];int sx,sy,tx,ty;int delta=abs('#'-'@');struct edge{ int to,w; edge *next;}e[MAXN<<3],*prev[MAXN];void insert(int u,int v,int w){ e[++top].to=v;e[top].next=prev[u];prev[u]=&e[top];e[top].w=w;}struct node{ int x,dis; bool operator <(const node& a)const { return dis>a.dis; }};void dijkstra(int s){ memset(dis,0x3f,sizeof(dis)); priority_queue<node> que; que.push((node){s,0});dis[s]=0; while (!que.empty()) { node t=que.top();que.pop(); if (vis[t.x]) continue; for (edge *i=prev[t.x];i;i=i->next) if (dis[i->to]>dis[t.x]+i->w) { dis[i->to]=dis[t.x]+i->w; que.push((node){i->to,dis[i->to]} ); } vis[t.x]=1; }}int main(){ while (~scanf("%d%d",&n,&m)) { if (n==0&&m==0) break; top=0;memset(vis,0,sizeof(vis));memset(c,0,sizeof(c)); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { char ch=getchar(); while (ch!='@'&&ch!='#') ch=getchar(); c[i][j]=ch;num[i][j]=++Num; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { if (c[i-1][j]==c[i][j]) insert(num[i][j],num[i-1][j],0); else if (abs(c[i-1][j]-c[i][j])==delta) insert(num[i-1][j],num[i][j],1); if (c[i+1][j]==c[i][j]) insert(num[i][j],num[i+1][j],0); else if (abs(c[i+1][j]-c[i][j])==delta) insert(num[i+1][j],num[i][j],1); if (c[i][j-1]==c[i][j]) insert(num[i][j],num[i][j-1],0); else if (abs(c[i][j-1]-c[i][j])==delta) insert(num[i][j-1],num[i][j],1); if (c[i][j+1]==c[i][j]) insert(num[i][j],num[i][j+1],0); else if (abs(c[i][j+1]-c[i][j])==delta) insert(num[i][j+1],num[i][j],1); } scanf("%d%d%d%d",&sx,&sy,&tx,&ty); sx++;sy++;tx++;ty++; dijkstra(num[sx][sy]); printf("%d\n",dis[num[tx][ty]]); }}
0 0
- [BZOJ2464]中山市选[2009]小明的游戏
- 【中山市选2009】【BZOJ2464】小明的游戏
- 【bzoj2464】【中山市选2009】【小明的游戏】【spfa】
- BZOJ2464: 中山市选[2009]小明的游戏
- 【BZOJ2464】【中山市选2009】小明的游戏 最短路水过
- BZOJ 2464 中山市选2009 小明的游戏 SPFA
- BZOJ 2464: 中山市选[2009]小明的游戏
- 2464: 中山市选[2009]小明的游戏
- BZOJ 2464 中山市选[2009]小明的游戏 SPFA
- BZOJ[2464]中山市选[2009]小明的游戏 SPFA
- bzoj 2464 中山市选[2009]小明的游戏
- BZOJ 2464 中山市选 2009 小明的游戏 最短路
- bzoj 2464: 中山市选[2009]小明的游戏 最短路
- BZOJ 2464: 中山市选[2009]小明的游戏 简单搜索
- [中山市选] 杀人游戏
- [中山市选2011]杀人游戏
- [中山市选2011]杀人游戏
- bzoj2464
- 基于Lookup的IOC事件总线框架
- Linux 下Hook一个共享库函数
- 算法练习:Sequence II
- 隐藏td中过多字符串的显示
- 从App内跳转到淘宝天猫详情页面
- 【中山市选2009】【BZOJ2464】小明的游戏
- 将原生的Launcher修改成类似MiUI的Launcher
- webservice部署问题——测试窗体只能用于来自本地计算机的请求
- Android 一组textview 点击之后更换背景 并保持不变
- Java使用HttpURLConnection检索网站时403错误处理方式
- 轻松搞定RabbitMQ(一)——RabbitMQ基础知识+HelloWorld
- 轻松征服Ruby--笔记(2)
- linux 重命名文件和文件夹
- 在BaseAdapter中各方法解析