大神求助!
  • 板块题目总版
  • 楼主MessageBoxA
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/6/24 19:54
  • 上次更新2023/10/27 22:40:18
查看原帖
大神求助!
77584
MessageBoxA楼主2022/6/24 19:54

RT,注释的那段语句,如果那个语句写在for外面就错了,写在for里面就对了,关键是for循环当中根本就没动过head啊?为什么会不一样

P1588 [USACO07OPEN]Catch That Cow S

#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int t,fj,cow,Now,Next;
bool vis[MAXN];
int q[MAXN],dis[MAXN];
void bfs(){
	int head=0,tail=1;
	while(head<=tail){
		head++;
		//Now=Next=q[head];这句如果写在这里就错了
		for(int i=1;i<=3;i++){
			Now=Next=q[head];//就这句
			switch(i){
				case 1:{
					Next++;
					break;
				}
				case 2:{
					Next--;
					break;
				}
				case 3:{
					Next*=2;
					break;
				}
			}
			if((Next>=0) && (Next<=100000)){
				if((!vis[Next]) || (dis[Next]>(dis[Now]+1))){
					tail++;
					q[tail]=Next;
					vis[Next]=1;
					dis[Next]=dis[Now]+1;
				}
			}
		}
		
	}
}
int main(){
	cin>>t;
	while(t--){
		memset(vis,0,sizeof(vis));
		memset(q,0,sizeof(q));
		memset(dis,0,sizeof(dis));
		cin>>fj>>cow;
		vis[fj]=1;
		q[1]=fj;
		bfs();
		cout<<dis[cow]<<endl;
	}
	return 0;
}

2022/6/24 19:54
加载中...