记录编号 149889 评测结果 AA
题目名称 最少转弯问题 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2015-02-26 21:26:32 内存使用 1.16 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
int i,m,n,j,k,a[333][333],f[333][333],qx,qy,zx,zy,t,x,y; 
int main()
{
 freopen("turn.in","r",stdin);
 freopen("turn.out","w",stdout);	
 cin>>n>>m;
 for (i=1;i<=n;++i)
  for (j=1;j<=m;++j)
  {
   cin>>a[i][j];
   f[i][j]=1000000;
   a[i][j]=!a[i][j];
  }
 cin>>qx>>qy>>zx>>zy;
 t=1;
 f[qx][qy]=1;
 while (true)
 {
  for (i=1;i<=n;++i)
   for (j=1;j<=m;++j)
    if (f[i][j]==t)
    {
     x=i-1;
     y=j;
     while (a[x][y])
     {
      f[x][y]=min(f[x][y],t+1);
      x--;
     }
     x=i+1;
     y=j;
     while (a[x][y])
     {
      f[x][y]=min(f[x][y],t+1);
      x++;
     }
     x=i;
     y=j-1;
     while (a[x][y])
     {
      f[x][y]=min(f[x][y],t+1);
      y--;
     }
     x=i;
     y=j+1;
     while (a[x][y])
     {
      f[x][y]=min(f[x][y],t+1);
      y++;
     }
    }
  if (f[zx][zy]<1000000)
   {
   	cout<<f[zx][zy]-2;
   	return 0;
   }
 t+=1;
 }
 return 0; 
}