问题标题: 酷町堂:3576 象棋

0
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追加了内容

@沈吴敏 老师帮忙看一下谢谢


1
已采纳
杜承俊
杜承俊
资深守护
资深守护

if(s>=300)return;

走的次数>=300过滤

0
王文博
王文博
缔造者之神
缔造者之神

继续恶搞吗?(等着你)

0
黄中阳
黄中阳
初级光能
初级光能

好巧,我也在做这题

黄中阳在2021-08-10 11:21:49追加了内容

不过……

黄中阳在2021-08-10 11:23:18追加了内容

你把26行去掉试试

我要回答