社区讨论

P1135 bfs 58pts 求调

灌水区参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lys6w2cr
此快照首次捕获于
2024/07/19 12:17
2 年前
此快照最后确认于
2024/07/19 14:16
2 年前
查看原帖
bfs数组 58pts 谢谢dalao
CPP
#include<bits/stdc++.h>
using namespace std;
int n , a , b;
int k[210][2];
int edge[210];
bool vis[210];
int step[210];
int ans;
int check (int x) {
	if (x < 1 || x > n){
		return 0;
	}
	else {
		return 1;
	}
}
void bfs(int a , int b) {
	int now = a;
	int head = 0 , tail = 1;
	int sum = 0;
	vis[a] = 1;
	step[a] = 0;
	edge[1] = a;
	ans = -1;
	while (head < tail){
		head++;
		sum = step[head] + 1;
		for (int i = 0 ; i <= 1 ; i++){
			now = edge[head] + k[edge[head]][i];
			if (check(now) == 1 && vis[now] == 0){
				tail++;
				vis[now] = 1;
				edge[tail] = now;
				step[tail] = sum;
				if (now == b){
					ans = sum;
				}
			}
		}	
	}
}
int main(){
	cin >> n >> a >> b;
	int tmp;
	for (int i = 1 ; i <= n ; i++){
		cin >> tmp;
		k[i][1] = tmp;
		k[i][0] = -tmp;
	}
	memset (step , -1 , sizeof(step));
	bfs(a , b);
	cout << ans;
	return 0;
}

//はいばらあい

回复

0 条回复,欢迎继续交流。

正在加载回复...