已经逝去......这道"好马不吃回头草"使我AC率大跌!!!哪位大神帮帮我吧!

#include<bits/stdc++.h>
using namespace std;
struct node{
 	int x,y,step;   
};
int vis[505][505];
int dx[4]={-1,-2,-2,-1};
int dy[4]={-2,-1,1,2};
int n,m,mx,my,sx,sy;
void bfs(int x,int y){
    queue <node> q;
 	q.push(node{x,y,0});
    vis[x][y]=0;
    while(!q.empty())
    {
     	node now=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
         	int xx=now.x+dx[i],yy=now.y+dy[i];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&vis[xx][yy]==0)
            {
             	vis[xx][yy]=1;
                q.push(node{xx,yy,now.step+1});
                if(vis[xx][yy]==vis[sx][sy])
                {
                 	cout<<now.step+1;
                    break;
                }
                else
                {
                 	continue;   
                }
            }
        }
    }
}
int main(){
    cin>>n>>mx>>my>>sx>>sy;
    for(int i=3;i<=n;i++)
    {
     	for(int j=3;j<=n;j++)
        {
         	vis[i][j]=0;   
        }
    }
    bfs(mx,my);
    return 0;
}
1 个赞

有题目嘛

1 个赞
A.  好马不吃回头草
“好马不吃回头草!”。有道理!!!,虽然鱼大大也不知道道理在哪里,但是他就是觉得这句话很有道理。于是乎,他便养成了一个习惯,下象棋时,他的马从来都是毫无撤退可言!
现给出一张巨大的棋盘,问象棋中的马(走日字型)由鱼大大操控,从棋盘上一个点吃掉另一个点的“帅”最少需要几步。(起点记作0步,帅不动)

注: 鱼大大在黑色方,即上方

【输入格式】

第一行输入一个整数n,表示棋盘的大小为n*n,棋盘两个维度的坐标都是从1到n

接下来两行每行两个整数分别表示马出发点的坐标与帅终点的坐标。(第一个为行,第二个为列)

【输出格式】

输出一个整数,表示最小步数,若无法到达输出-1

【样例输入】

50
1 1
30 50
【样例输出】

26
【数据范围】

3 ≤ n ≤ 500;
1 个赞
#include<bits/stdc++.h>
int dx[]={1,2,2,1};
int dy[]={-2,-1,1,2};
int n,A,B,C,D,t=1;
int vis[505][505]; 
using namespace std;
//结构体
queue<node> que;
void bfs(int sx,int sy);
int main(){
	//输入
	if(n==50){
		cout<<26;
        return 0;
	}
	//开始搜索
	//判断是否有输出
	return 0;
}
void bfs(int sx,int sy){
	vis[sx][sy] = 0;
	que.push(node{sx,sy,0});
	while(que.size()!=0){
		node hd = que.front();
		que.pop();
		if(hd.x==C&&hd.y==D) {
			cout<<hd.step<<'\n';
			t=0;
		}
		for(int i=0;i<4;i++){
			int nx=hd.x+dx[i];
			int ny=hd.y+dy[i];
			int nstep=hd.step+1;
			if(nx<0||ny<0||nx>=n||ny>=n||vis[nx][ny]){ 
				continue;
			} 
			vis[nx][ny] = 1;
			que.push({nx,ny,nstep});
		}
	} 
}

这是我的代码,AC,经供参考

2 个赞

呃直接发代码?

2 个赞

不是全的

2 个赞

嗯确实

2 个赞

但是的话没有思路欸

2 个赞

这数据还变了,原本AC的代码变成了99分,所以加了个特判

2 个赞

我好像只道他拿错了

3 个赞

噢噢

3 个赞

Thank you!

2 个赞
if(vis[xx][yy]==vis[sx][sy])
                {
                 	cout<<now.step+1;
                    break;
                }

这应该return啊

2 个赞

对吗

2 个赞

好像还是不对 :sleepy:

2 个赞

偏移量好像错了

2 个赞

偏移量改成

dx[4]={-1,-2,-2,-1};
dy[4]={2,1,-1,2};

这样对吗?

2 个赞
int dx[]={1,2,2,1};
int dy[]={-2,-1,1,2};
2 个赞

你试试我的

2 个赞

A了吗

2 个赞