70pts求助dalao
查看原帖
70pts求助dalao
569437
SunburstFan楼主2022/6/1 17:55

原来是80分,错#3,#8,现在改了一个

if(t.x<=0||t.y<=0||t.x>n||t.y>n||g[t.x][t.y]=='1'||dp[t.x][t.y]<=dp[p.x][p.y]+1)

里面的‘’,应该是对的,但只有70pts了

代码:

#include<queue>
#include<cstdio>
#include<iostream>
using namespace std;
int n;
char g[1005][1005];
int s[2],e[2];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int dp[1005][1005];
struct node
{
	int x,y;
}p,t;
queue<node> q;
int main()
{
	for(int i=0;i<1005;i++)
		for(int j=0;j<1005;j++)
			dp[i][j]=1<<30;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>g[i][j];
	scanf("%d%d%d%d",&s[0],&s[1],&e[0],&e[1]);
	p.x=s[0];
	p.y=s[1];
	dp[s[0]][s[1]]=0;
	q.push(p);
	while(!q.empty())
	{
		p=q.front();
		q.pop();
		if(p.x==e[0]&&p.y==e[1])
			break;
		for(int i=0;i<4;i++)
		{
			t.x=p.x+dir[i][0];
			t.y=p.y+dir[i][1];
			if(t.x<=0||t.y<=0||t.x>n||t.y>n||g[t.x][t.y]=='1'||dp[t.x][t.y]<=dp[p.x][p.y]+1)
				continue;
			dp[t.x][t.y]=dp[p.x][p.y]+1;
			q.push(t);
		}
	}
	printf("%d",dp[e[0]][e[1]]);
	return 0;
} 
2022/6/1 17:55
加载中...