http://poj.org/problem?id=2049
#include <stdio.h>
#include <string.h>
#define MAX_N 210
#define INT_MAX 32767
int v[MAX_N + 1][MAX_N + 1]; //v[i][j]为到达格子[i][j]的最小步骤数
int Round[MAX_N + 1][MAX_N][4]; //用左上角点的坐标来指代格子,第三维0、1、2、3指定了该数组元素对应上、下、左、右边,数组的值表明了该边的类型 0空气 1墙 2门
int wn, dn, startXI, startYI, minSteps;//wn墙数量 dn门的数量 起点对应的格子坐标
double startXF,startYF;//起点的输入浮点坐标
int dirarray[4][2] = {
{0, 1}, {0, -1}, {-1, 0}, {1, 0}};//方向数组,走四个方向时坐标的变换 分别为上、下、左、右
typedef struct elem//加入bfs队列的元素类型
{
//x、y为这个格子的坐标,dir记录了是从当前格子的那个方向进入到这个格子的, 上0 下1 左2 右3,stepnum为到达当前格子所需要的步骤数量
int x, y, dir, stepnum;
}elem;
elem bfsq[100000];
void changeDir(int orginal,int* newDir)//取当前方向的对面方向
{
if(orginal==0)
*newDir=1;
else if(orginal==1)
*newDir=0;
else if