CodeForces 676D代码 哪里有问题呢?
题目:
http://codeforces.com/problemset/problem/676/D
code:
#include <stdio.h>
#define MAXN 1001
#define LEFT 0
#define TOP 1
#define RIGHT 2
#define BOTTOM 3
struct block{
//left,top,right,bottom
int doors[];
int doors_num;
int rotats;
int minutes;
};
struct block labyrinth[MAXN][MAXN];
char visited[MAXN][MAXN]; struct node{
int x;
int y;
};
int top;
struct node path[MAXN*MAXN];
int N,M;
int xt,yt,xm,ym;
int min_minutes = 0x0FFFFFFF;
void init_doors(int x,int y,char c)
{
int i;
for (i=;i<;i++)
{
labyrinth[x][y].doors[i] = ;
}
labyrinth[x][y].doors_num =;
labyrinth[x][y].rotats = ;
labyrinth[x][y].minutes = 0x0FFFFFFF;
switch(c)
{
case '+':
for (i=;i<;i++)
{
labyrinth[x][y].doors[i] = ;
}
labyrinth[x][y].doors_num = ;
labyrinth[x][y].rotats = ;
break;
case '-':
labyrinth[x][y].doors[LEFT] = ;
labyrinth[x][y].doors[RIGHT] =;
labyrinth[x][y].doors_num = ;
break;
case '|':
labyrinth[x][y].doors[TOP] = ;
labyrinth[x][y].doors[BOTTOM] =;
labyrinth[x][y].doors_num = ;
break;
case '^':
labyrinth[x][y].doors[TOP] = ;
labyrinth[x][y].doors_num = ;
break;
case '>':
labyrinth[x][y].doors[RIGHT] = ;
labyrinth[x][y].doors_num = ;
break;
case '<':
labyrinth[x][y].doors[LEFT] = ;
labyrinth[x][y].doors_num = ;
break;
case 'V':
labyrinth[x][y].doors[BOTTOM] = ;
labyrinth[x][y].doors_num = ;
labyrinth[x][y].rotats = ;
break;
case 'L':
labyrinth[x][y].doors[TOP] = ;
labyrinth[x][y].doors[BOTTOM] =;
labyrinth[x][y].doors[RIGHT] = ;
labyrinth[x][y].doors_num =;
labyrinth[x][y].rotats = ;
break;
case 'R':
labyrinth[x][y].doors[TOP] = ;
labyrinth[x][y].doors[BOTTOM] =;
labyrinth[x][y].doors[LEFT] = ;
labyrinth[x][y].doors_num = ;
labyrinth[x][y].rotats = ;
break;
case 'U':
labyrinth[x][y].doors[RIGHT] = ;
labyrinth[x][y].doors[BOTTOM] =;
labyrinth[x][y].doors[LEFT] = ;
labyrinth[x][y].doors_num = ;
break;
case 'D':
labyrinth[x][y].doors[TOP] = ;
labyrinth[x][y].doors[RIGHT] =;
labyrinth[x][y].doors[LEFT] = ;
labyrinth[x][y].doors_num = ;
break;
}
}
void push(int i,int j)
{
top++;
path[top].x = i;
path[top].y = j; }
struct node pop()
{
top--;
return path[top +];
}
int get_door(int x,int y,int direction,int roates)
{
int t = roates % ;
int index = direction - t;
if (index < )
{
index += ;
} return labyrinth[x][y].doors[index]; }
void process_state(int x,int y,int cur_rotates,int cur_time)
{
int dir_y[] = {-,,,};
int dir_x[] = { ,-,,};
int i,nx,ny;
for (i=;i<;i++)
{
nx = x+dir_x[i];
ny = y+dir_y[i];
if (nx< || nx >N)
{
continue;
}
if (ny< || ny>M)
{
continue;
}
if (get_door(x,y,i,cur_rotates)&& get_door(nx,ny,(i+)%,cur_rotates))
{
if (!visited[nx][ny])
{
visited[nx][ny] =;
labyrinth[nx][ny].minutes = cur_time+;
labyrinth[nx][ny].rotats = cur_rotates;
if (nx == xm && ny == ym)
{
if (min_minutes > cur_time+)
{
min_minutes = cur_time+;
}
}else
{ push(nx,ny);
} }else
{
if (labyrinth[nx][ny].minutes >cur_time+ )
{
labyrinth[nx][ny].minutes = cur_time+;
labyrinth[nx][ny].rotats = cur_rotates;
push(nx,ny);
}
}
} }
}
int bfs()
{
int x,y,cur_rotates,i,nx,ny,t,cur_time; struct node cur;
top = -;
push(xt,yt);
labyrinth[xt][yt].minutes = ;
visited[xt][yt] =; while(top!= -)
{
cur = pop(); //left
x = cur.x;
y = cur.y;
cur_rotates = labyrinth[x][y].rotats;
cur_time = labyrinth[x][y].minutes;
t = ;
while(t < )
{
if (cur_time + t < min_minutes)
{
process_state(x,y,cur_rotates+t,cur_time+t);
}
t++; }
}
return labyrinth[xm][ym].minutes; }
int main()
{
int i,j;
char str[MAXN];
scanf("%d %d",&N,&M);
for (i=;i<=N;i++)
{
scanf("%s ",str);
for (j=;j<=M;j++)
{ init_doors(i,j,str[j-]);
visited[i][j] = ;
}
}
scanf("%d %d",&xt,&yt);
scanf("%d %d",&xm,&ym);
//check same logcation
if (xt == xm && yt == ym)
{
printf("");
return ;
}
//dfs(xt,yt,0); bfs();
if(min_minutes == 0x0FFFFFFF)
printf("-1");
else
printf("%d",min_minutes); return ;
}
CodeForces 676D代码 哪里有问题呢?的更多相关文章
- codeforces 676D Theseus and labyrinth BFS搜索
分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了 #include <cstdio> #include <iost ...
- CodeForces 676D Theseus and labyrinth
最短路. $dis[i][j][k]$记录到点$(i,j)$,门的状态为$k$时的最短路.转移的时候有$8$种方案,即直接走向周围四个点,或者进行旋转.比较烦的是判断两个相邻的点在状态$k$下是否连通 ...
- Codeforces Round #754 (Div. 2) C. Dominant Character
题目:Problem - C - Codeforces 如代码,一共有七种情况,注意不要漏掉 "accabba" , "abbacca" 两种情况: 使用 ...
- XTU1266:Parentheses(贪心+优先队列)
传送门 题意 从左到右有n个连续的组,每一组有Li个括号,要么全是左括号,要么全是右括号,以及该组的每一个左括号翻成右括号, 或者右括号翻成左括号的花费Di.可以对这n个组的括号进行翻转,每一个括号都 ...
- ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组
I. query 题目链接: Problem Description Given a permutation \(p\) of length \(n\), you are asked to answe ...
- CodeForces - 950C Zebras 模拟变脑洞的天秀代码
题意:给你一个01串,问其是否能拆成若干形如0101010的子串,若能,输出所有子串的0,1 的位置. 题解:一开是暴力,然后瞎找规律, 最后找到一种神奇的线性构造法:扫一遍字符串,若为0就一直竖着往 ...
- Educational Codeforces Round 50 (Rated for Div. 2)的A、B、C三题AC代码
A题链接:https://codeforces.com/contest/1036/problem/A A题AC代码: #include <stdio.h> #include <std ...
- Codeforces Round #334(div.2)(新增不用二分代码) B
B. More Cowbell time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Codeforces Round #352 (Div. 2),A题与B题题解代码,水过~~
->点击<- A. Summer Camp time limit per test 1 second memory limit per test 256 megabytes input s ...
随机推荐
- PHP面向对象讲解
面向对象 类<------>对象 面向对象例题 理解: 减少 变量的重新定义 比如 变量前的 var $ 思路更加明确 class Yuan ----后面不加() ...
- 【XLL 框架库函数】 QuitFramework
去初使化框架库,简问题是才的重新初使化 XLOPER/XLOPER12. 参数 这个函数没有参数 属性值/返回值 这个函数没有返回值.
- vim for windows 简介
普通人的编辑利器--VIM (for windows) 本文转载自 FROM Vincent_czz2005年5月,我开始用VIM.此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而 ...
- 根据字符长度动态确定UIlabel宽高
iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UI ...
- c/c++连接mysql数据库
环境:win7 x64.vs2008.mysql 对于已经安装mysql的,查看mysql安装目录,如果安装目录下没有include和lib目录, 说明没有完全安装,需要下载mysql-connect ...
- Myeclipse Templates详解(一) —— Java模板基础
目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Mye ...
- hdfs中block的使用情况,副本所在情况等等
hadoop fsck /user/hive/warehouse/dataplat.db/hive_datacppa2xsourcendchinaraw/partitiondate=2016-11-2 ...
- Linux学习笔记(3)-常用命令
江湖传言,Linux和Windows不同,他主要的用途是在一些服务器,或者片内系统上,所以人机交互界面自然就没有Windows那么漂亮,其实也没有那个必要. 所以,学习Linux的第一步,就是学习他那 ...
- Poj2033
算法想到了,题目坑太多,数组,含‘0’ #include <cstdio> #include <algorithm> #include <cstring> #inc ...
- Python for Infomatics 第12章 网络编程二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.3 用HTTP协议获取一张 ...