背景
描述
这里有一个地图的例子:
11 | . . . . . . . . . .
10 | . . . . * . . . . .
9 | . . . . . . . . . .
8 | . . . * . * . . . .
7 | . . . . . . . * . .
6 | . . * . . * . . . H
5 | * . . . . . . . . .
4 | . . . * . . . * . .
3 | . K . . . . . . . .
2 | . . . * . . . . . *
1 | . . * . . . . * . .
0 ----------------------
1
0 1 2 3 4 5 6 7 8 9 0
The Knight 可以按照下图中的A,B,C,D...这条路径用5次跳到草的地方(有可能其它路线的长度也是5):
11 | . . . . . . . . . .
10 | . . . . * . . . . .
9 | . . . . . . . . . .
8 | . . . * . * . . . .
7 | . . . . . . . * . .
6 | . . * . . * . . . F<
5 | * . B . . . . . . .
4 | . . . * C . . * E .
3 | .>A . . . . D . . .
2 | . . . * . . . . . *
1 | . . * . . . . * . .
0 ----------------------
1
0 1 2 3 4 5 6 7 8 9 0
输入格式
第二行..结尾: 如题目描述的图。
输出格式
测试样例1
输入
10 11
..........
....*.....
..........
...*.*....
.......*..
..*..*...H
*.........
...*...*..
.K........
...*.....*
..*....*..
输出
5
备注
代码
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std; struct cc{
int x,y;
}que1; char juzhen[][];
int x,y,n,m,ans,
dx[]={,,-,-,,,-,-},
dy[]={,-,,-,,-,,-},
map[][];
queue<cc> que; void print(){
for(int i=;i<=m;i++) {
for(int j=;j<=n;j++){
printf("%d",map[i][j]);
}
puts("");
}
puts("");
} int main(){
// freopen("01.txt","r",stdin);
scanf("%d%d",&n,&m);//横n 竖m
for(int i=;i<=m;i++) {
for(int j=;j<=n;j++){
cin>>juzhen[i][j];
// scanf("%c",juzhen[i][j]);
if(juzhen[i][j]=='K') {x=i;y=j;}
}
} // print();
cc c1;c1.x=x;c1.y=y;
que.push(c1);
map[x][y]=;
while(!que.empty()){
que1=que.front();que.pop();
for(int i=;i<;i++){
int xx=que1.x+dx[i],yy=que1.y+dy[i];
if(xx<||yy<||xx>m||yy>n) continue;
if(map[xx][yy]>) continue;
if(juzhen[xx][yy]=='*') continue;
if(juzhen[xx][yy]=='H'){
ans=map[que1.x][que1.y];
// cout<<xx<<' '<<yy<<endl;
while(!que.empty()) que.pop();
break;
}
map[xx][yy]=map[que1.x][que1.y]+;
cc que2;que2.x=xx;que2.y=yy;
que.push(que2);
}
// print(); }
printf("%d\n",ans);
return ;
}测试代码没删掉,勿喷
n和m老是搞反,很不爽
还有就是37行求‘K’坐标没加括号,导致y永远不对
另外这样输入只能一整行或字符串地读,或者用cin
为了方便取‘K’我用的是cin