0
已解决
刘乐宸
新手天翼
新手天翼
题目描述 Description
大家应该都知道象棋怎么下吧,象棋中有个棋子是“马”,马只能走“日”字形,现在有一个n*m的棋盘,要求你计算出从棋盘上的棋子马到达棋盘上任意一个点最少要走几步。
输入描述 Input Description
一行四个数据,棋盘的大小和**坐标
输出描述 Output Description
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
样例输入 Sample Input
3 3 1 1
样例输出 Sample Output
0 3 2
3 -1 1
2 1 4
数据范围及提示 Data Size & Hint
1<n,m≤400
#include <bits/stdc++.h>
using namespace std;
string a,b;
int cnt;
int main()
{
cin >> b;
getline(cin, a); //吃换行
getline(cin, a);
for(int i=0; i<a.size(); i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
}
for(int i=0; i<b.size(); i++)
{
if(b[i]>='A'&&b[i]<='Z')
{
b[i]+=32;
}
}
b=' '+b+' ';
a=' '+a+' ';
int idx=a.find(b);
int pos=idx;
while(idx!=-1)
{
cnt++;
idx = a.find(b, idx+1);
}
if(cnt==0) cout<<-1;
else cout<<cnt<<' ' <<pos;
return 0;
}
为啥输出都是0
刘乐宸在2021-08-10 11:01:12追加了内容
代码给错了……
这个:
#include <bits/stdc++.h>
using namespace std;
int sx, sy, n, m;
int mp[1000][1000];
bool vis[1000][1000];
int ans[1000][1000]={0x3f3f3f3f};
int xx,yy;
int dir[9][2]={{0},{2,-1},{-1,2},{-1,-2},{-2,-1},{2,1},{1,2},{1,-2},{-2,1}};
int aw=0;
void dfs(int x, int y)
{
if(x==xx&&y==yy)
{
if(aw!=0)
ans[x][y]=min(aw, mp[x][y]);
return;
}
for(int i=1; i<=8; i++)
{
int dx=x+dir[i][0],dy=y+dir[i][1];
if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy])
{
aw++;
vis[dx][dy]=true;
dfs(dx, dy);
vis[dx][dy]=false;
}
}
}
int main()
{
cin >> n >> m >> sx >> sy;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
memset(mp, 0, sizeof(mp));
memset(vis,0,sizeof(vis));
aw=0;
xx=i, yy=j;
dfs(sx, sy);
mp[i][j]=aw;
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(i==sx&&j==sy)
{
cout<<0<<setw(5);
}
else cout << ans[i][j]<<setw(5);
}
cout<<endl;
}
return 0;
}
为啥输出都是0
刘乐宸在2021-08-10 11:04:34追加了内容
@沈吴敏 老师帮忙看一下谢谢