您的位置:首页 > 其它

这是电子老鼠的问题,答案对了,但是我遇到了一个叫不完全正确的新结论,求助。。。2333

2017-11-12 15:37 239 查看
#include<iostream>

#include<queue>

#include<map>

using namespace std;

char str[13][13];

int a,b,c,d,A,B,C,D;

queue<int>q1;

map<int,int>step;

void init();

int dr[4]={0,1,0,-1};//行的变换  

int dc[4]={-1,0,1,0};//列的变换 

int canmoveto(int u,int dire);

int moveto(int u,int dire);

int bfs();

int main()

{
int i,j,num;

    cin>>A>>B>>C>>D;

    a=A-1;

    b=B-1;

    c=C-1;

    d=D-1;
for(i=0;i<12;i++)
{
for(j=0;j<12;j++)
cin>>str[i][j];

    }

    init();
num=bfs();
cout<<num<<endl;



int bfs()

{

   int u,v,i;

   

   while(!q1.empty())

   {

    u=q1.front();

    q1.pop();

   

    for(i=0;i<4;i++)

    {

    if(canmoveto(u,i))

    {

    v=moveto(u,i);

    if(v==c*12+d)

     return(step[u]+1);

    if(step.count(v)==0)

    {

    q1.push(v);

    step[v]=step[u]+1;

    } 

    }

    }

   

   

   }

   return(-1);

    

}

int canmoveto(int u,int dire)

{
int r,c,ar,ac;
r=u/12;c=u%12;
ar=r+dr[dire];
ac=c+dc[dire];
if(str[ar][ac]=='.')
return 1;
else
return 0;

}

int moveto(int u,int dire)

{
int r,c,ar,ac;
r=u/12;c=u%12;
ar=r+dr[dire];
ac=c+dc[dire];
u=ar*12+ac;

}

void init()

{
int u;
u=a*12+b;
q1.push(u);
step[u]=0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐