"象棋"求助

28. 象棋

题目ID:9676必做题100分

最新提交:

Wrong Answer

70 分

历史最高:

Wrong Answer

70 分

时间限制: 500ms

空间限制: 65536kB

题目描述

【题目描述】

马走日,象走田,这是中国象棋的规则。鱼大大非常喜欢下中国象棋,也十分精通中国象棋,象棋中每个棋子都有自己对应的价值,如:车9分,马炮4.5分,士象3分,兵1分,过河兵2分。但是他认为象棋中有一个非常bug的点,就是马居然比象更厉害,价值更高?!以象命名的象棋中的象居然过的这么惨,这不科学!于是他自己设定了一个修改版的象棋,增强了“象”,使其比“马”更加灵活厉害。
修改后。每个子的价值如下:将帅0分(将帅要是都没了,还算啥分呀),车9分,炮8分,象7分,马4分,士3分,兵1分,过河兵2分。其中,象可以走4格直线或者走目字走田字,并且无象脚(不会被其他子阻挡)还可过河,其余棋子移动规则不变。终于!象被无限加强了,是时候向马儿复仇了!现给出一残局,在马不动的情况下,问象最少几步可以吃掉马?如果吃不到马则输出“No!God!Please no!”。

说明:象马出现位置随机,保证残局有且只有一象一马,象可以吃掉任意棋子(即若象移动后的落点位有棋子,会直接吃掉并落点)
注:象走说明:以下图为例,此时第5行第3列的黑象有13个落点位在棋盘内,可直接走过去,还有3个落点位在棋盘外,不可走。

输入格式

【输入格式】
一个10*9的二维数组,表示象棋棋盘,其中,数字对应各棋子的分数,0代表该位置空或为将帅

输出格式

【输出格式】
象吃掉马时的步数

样例

Input 1

0 0 0 0 8 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 9 0 0 0 0 8 7 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0

Output 1

No!God!Please no!

Input 2

0 0 0 0 8 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 8 7 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0

Output 2

No!God!Please no!

下面是我的代码

#include <bits/stdc++.h>
using namespace std;
struct node{
	int x,y,step;
};
int mapa[15][15];
int vis[15][15];
int dx[]={-4,-3,-1,0,1,3,4,3,1,0,-1,-3};
int dy[]={0,-1,-3,-4,-3,-1,0,1,3,4,3,1};
int sx,sy,ex,ey;
void bfs(int x,int y){
	queue <node> q;
	q.push(node {x,y,0});
	while(!q.empty()){
		node now=q.front();
		q.pop();
		for(int i=0;i<12;i++){
			int xx=now.x+dx[i],yy=now.y+dy[i];
			if(xx==ex&&yy==ey){
				cout<<now.step+1;
				return;
			}
			if(xx>0&&xx<10&&yy>0&&yy<9&&vis[xx][yy]!=1){
				vis[xx][yy]=1;
				q.push(node{xx,yy,now.step+1});
			}
		}
	}
	cout<<"No!God!Please no!";
}
int main(){
	memset(vis,-1,sizeof vis);
	for(int i=1;i<=10;i++){
		for(int j=1;j<=9;j++){
			cin>>mapa[i][j];
			if(mapa[i][j]==7){
				sx=i;
				sy=j;
			}
			if(mapa[i][j]==4){
				ex=i;
				ey=j;
			}
		}
	}
	bfs(sx,sy);
        cout<<endl;
	return 0;
}

哪位大神告诉我为什么只有70分

2 个赞

image
这个有问题
自己再看看
不知道再跟我说

3 个赞

还有请在问题讨论区问题

2 个赞

@金杭东 应该不是这的问题

1 个赞

没有4,1这种,还有是2,2

1 个赞

问题是这题应该是错在输出
No!God!Please no!
的时候结尾!用成了中文的

核心 勿3.
struct node{
	int x,y,step;
};
queue<node>que;
void bfs(int x,int y){
	vis[x][y]=1;
	que.push({x,y,0});
	while(que.size()){
        node hd=que.front();
        y]=1;
            que.push({nx,ny,nstep});
        }
    }
    cout << "No!God!Please no!";
}
int main(){
    for(int i=1;i<=10;i++){
    	for(int j=1;j<=9;j++){
    		cin>>a[i][j];
    		if(a[i][j]==7){
    			A=i;
    			B=j;
			}
			if(a[i][j]==4){
				C=i;
				D=j;
			}
		}
	}
	bfs(A,B);
    return 0;
}