一个离谱的错误
  • 板块灌水区
  • 楼主PureWind1130
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/9 15:33
  • 上次更新2024/7/9 16:44:16
查看原帖
一个离谱的错误
728421
PureWind1130楼主2024/7/9 15:33

P1588 [USACO07OPEN] Catch That Cow S

#include "bits/stdc++.h"
using namespace std;

queue<int> q;
int n,k,u,v,t,dist[100005],visited[100005];

bool judge(int x)
{
	if(x>=0&&x<=100005&&!visited[x]) return true;
	return false;
}

void bfs(int n)
{
	q.push(n);
	while(!q.empty())
	{
		u=q.front();
		if(u==k)
		{
			cout<<dist[u]<<endl;
			return ;
		} 
		q.pop();
		for(int i=0;i<3;i++)
		{
			if(i==0)
				v=u+1;
			else if(i==1)
				v=u-1;
			else 
				v=u*2;
			if(judge(v))
			{
				q.push(v);
				dist[v]=dist[u]+1;
				visited[v]=1;
			}
		}
	}
}

int main()
{
	cin>>t;
	while(t--)
	{
		while(!q.empty()) q.pop();
		memset(dist,0,sizeof(dist));
		memset(visited,0,sizeof(visited));
		cin>>n>>k;
		dist[n]=0;
		visited[n]=1;
		bfs(n);	
	}
	return 0;
}

该段代码洛谷实测0分

#include "bits/stdc++.h"
using namespace std;

queue<int> q;
int n,k,u,v,dist[100005],visited[100005],t;

bool judge(int x)
{
	if(x>=0&&x<=100005&&!visited[x]) return true;
	return false;
}

void bfs(int n)
{
	q.push(n);
	while(!q.empty())
	{
		u=q.front();
		if(u==k)
		{
			cout<<dist[u]<<endl;
			return ;
		} 
		q.pop();
		for(int i=0;i<3;i++)
		{
			if(i==0)
				v=u+1;
			else if(i==1)
				v=u-1;
			else 
				v=u*2;
			if(judge(v))
			{
				q.push(v);
				dist[v]=dist[u]+1;
				visited[v]=1;
			}
		}
	}
}

int main()
{
	cin>>t;
	while(t--)
	{
	//	cout<<"tme:"<<tme<<endl;
		while(!q.empty()) q.pop();
		memset(dist,0,sizeof(dist));
	    memset(visited,0,sizeof(visited));
		cin>>n>>k;
		dist[n]=0;
		visited[n]=1;
		bfs(n);	
	}
	return 0;
}

该段代码洛谷实测满分 而以上两段代码的区别仅在于变量的定义位置不同 第一段代码中变量 tt 的定义位置不同 即第一段代码的定义为

int n,k,u,v,t,dist[100005],visited[100005];

而第二段的代码变量定义为

int n,k,u,v,dist[100005],visited[100005],t;

鄙人百思不得其解

2024/7/9 15:33
加载中...