这是电子老鼠的问题,答案对了,但是我遇到了一个叫不完全正确的新结论,求助。。。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;
}
#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;
}
相关文章推荐
- EasyUI的Model的Model Window,但是遇到一个问题,就是如何把jsp页面中js的变量传入模态框中input的value
- 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
- 昨天遇到了linux 一个问题 以为是改hostname 的值 ,但是不是
- 求助~~~~~~~~~ 有人遇到过这种问题吗? 一个radiogroup里有两个radiobutton,选择了其中一个后重置将两个radiobutton setChecked(false), 导致直接
- 作为一个程序猿,是不是经常会用到.chm文档,但是我们可能会遇到这样那样的问题,比如.chm文档打不开
- 【遇到的问题】想写一个通用的adapter,样式一样但是数据源是不同的,怎么做
- 做一个问题,如果输入的答案正确则弹出正确,错误弹出错误
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 遇到的一个SCOM怪问题,虽然解决但是不知道为什么
- 求助:递归地读取一个路径下文件总行数遇到的问题。
- 重装机遇到的问题——虽然问题解决——但是期待得到真正的答案
- 遇到一个Opera下的over-flow问题,暂时解决,但是方法不理想。
- 做一个问题,如果输入的答案正确则弹出正确,错误弹出错误
- 遇到关于strtok的一个问题,郁闷了好一会儿终于找到答案
- IIS配置遇到的问题——未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 遇到一个怪问题,在网上找到了答案,嘿嘿
- Generic Host Process for Win32 Services 遇到了一个问题,需要关闭
- “未能加载文件或程序集“×××”或它的某一个依赖项。试图加载格式不正确的程序”问题的解决
- 休斯顿,我们遇到了一个问题
- secureCRT建了一个串口COM1后,连接上开发板后,可以正确接受和显示串口的输出,但是按键输入无效