BZOJ 3299: [USACO2011 Open]Corn Maze玉米迷宫(BFS)
水题一道却交了4次QAQ,真是蒟蒻QAQ
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node{
int x,y,t;
}st,en;
queue<node> s;
#define maxn 1010
int a[maxn][maxn];
bool b[maxn][maxn];
int w[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m;
char str[10000];
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%s",str);
for (int j=1;j<=m;j++){
if (str[j-1]=='#') a[i][j]=1;
else if (str[j-1]=='@') {st=(node){i,j,0};a[i][j]=1;}
else if (str[j-1]=='=') en=(node){i,j,0};
else if (str[j-1]!='.')a[i][j]=str[j-1];
}
}
s.push(st);
for (int i=1;i<=n;i++) a[i][0]=a[i][m+1]=1;
for (int i=1;i<=m;i++) a[0][i]=a[n+1][i]=1;
while (!s.empty()){
node u=s.front();
if (u.x==en.x&&u.y==en.y) {printf("%d",u.t);return 0;}
s.pop();
for (int i=0;i<4;i++)
if (a[u.x+w[i][0]][u.y+w[i][1]]!=1){
if (a[u.x+w[i][0]][u.y+w[i][1]]>1){
if (b[u.x+w[i][0]][u.y+w[i][1]]) continue;
b[u.x+w[i][0]][u.y+w[i][1]]=1;
for (int k=1;k<=n;k++)
for (int j=1;j<=m;j++)
if ( a[k][j]==a[u.x+w[i][0]][u.y+w[i][1]] &&(u.x+w[i][0]!=k||u.y+w[i][1]!=j) ) {s.push((node){k,j,u.t+1});}
}else {
a[u.x+w[i][0]][u.y+w[i][1]]=1;
s.push((node){u.x+w[i][0],u.y+w[i][1],u.t+1});
}
}
}
return 0;
}
最新文章
- UploadHandleServlet
- 第3章 拍摄UFO——单一职责原则
- 三种常用的MySQL建表语句(转)
- Java数据结构和算法之数组与简单排序
- angularJs自定义服务
- hdoj-2033
- 编写高性能JavaScript【转】
- Mac上pod install一直停住的解决办法
- Domain Model(领域模型)
- linux终奌站 信息 格式 更改 /etc/bashrc
- console.dir()和console.log()的区别
- highcharts的多级下钻以及图形形态转换
- Lua热更新(hotfix)
- 添加极光推送以及在ios中的问题
- [SHOI2014]三叉神经树
- POJ1064 Cable master(二分 浮点误差)
- PHP安装BCMath扩展
- centos7上修改lv逻辑卷的大小
- 微信小程序 条件渲染 wx:if
- EOS keosd
热门文章
- IOS开发-UI学习-NSMutableAttributedString(带属性的字符串)的使用
- ASP.NET异步处理
- .net中的4种事务总结
- WPF中ContextMenu通过CommandParameter传参
- Failed to install *.apk on device &#39;emulator-5554&#39;: timeout
- 差分硬盘的merge(合并差异)实验分析
- Dev的关于XtraGrid的使用2
- JWPlayer使用指南
- MD5碰撞后时代,MD5还有存在的意义吗?
- KB奇遇记(5):奇葩的用人制度