自创DFS/BFS题

学生们的食堂之路

题目描述

由于体委带错了队,导致同学们迷失在了一个 a∗b 的迷宫当中。他们需要在饱食度耗尽前到达食堂,否则他们都会完蛋。同学们还剩下 n 点饱食度,每单位时间内要消耗 k 点饱食度,一单位时间内同学们可向上下左右任意一个方向移动一格。

输入格式

第一行两个整数 n,k ,分别表示同学们剩余的饱食度和每单位时间内所消耗的饱食度。
第二行两个整数 a,b ,表示迷宫的长和宽。
3∼a+3 行,每行 b 个字符,表示迷宫。'.‘表示空地,’#'表示墙,‘F’表示食堂,’@'表示饥饿的同学们。

输出格式

如果同学们能在饱食度耗尽前到达食堂,输出同学们花的最小时间和相应的剩余饱食度。
否则,输出No god please no!

输入输出样例

输入 #1

666 1
3 3
.@.
.##
F..

输出 #1

3 663

输入 #2

114514 1919810
3 3
..@
.##
.F.

输出 #2

No god please no!

说明/提示

0<n,k<2∗10^6
0<a,b≤100

不喜勿喷谁来挑战

2 个赞

真的是纯自创

2 个赞

哈哈哈

2 个赞

666,周晨捷有实力
楼逸杨的英文名是不是叫dan

2 个赞

不是,你有意见

2 个赞
#include <bits/stdc++.h>

using namespace std;

struct Node {
	int x, y;
	int time;
	int food;
};

int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};

int main(void) 
{
	char mapn[1005][1005];
	bool vis[1005][1005];
	
	int n, k;
	int a, b;
	
	cin >> n >> k;
	cin >> a >> b;
	
	int stx, sty;
	queue<Node> qu;
	
	for (int i = 1; i <= a; i++) {
		for (int j = 1; j <= b; j++) {
			cin >> mapn[i][j];
			if (mapn[i][j] == '@') {
				stx = i;
				sty = j;
			}
		}
	}
	
	qu.push({stx, sty, 0, n});
	memset(vis, false, sizeof(vis));
	vis[stx][sty] = true;
	
	int minTime = INT_MAX;
	int Food = -1;
	
	while (!qu.empty()) {
		Node now = qu.front();
		qu.pop();
		
		int food_time = now.food - (now.time * k);
		
		if (food_time < 0) continue;
		
		if (mapn[now.x][now.y] == 'F') {
			if (now.time < minTime) {
				minTime = now.time;
				Food = food_time;
			}
			continue;
		}
		
		for (int i = 0; i < 4; i++) {
			int now_x = now.x + dx[i];
			int now_y = now.y + dy[i];
			
			if (now_x > 1 || now_y > 1 ||
				now_x < a || now_y < b ||
				mapn[now_x][now_y] == '#' || 
				!vis[now_x][now_y]) 
			{
				vis[now_x][now_y] = true;
				qu.push({now_x, now_y, now.time + 1, now.food});
			}
			
			
		}
	}
	
	if (minTime == INT_MAX) {
		cout << "No god please no!";
	} else {
		cout << minTime << ' ' << Food;
	}
	
	return 0;
}

OKK!

建议加强体委 @周晨捷

这句可以改成:体委真善

3 个赞

你好:dan

2 个赞

哈哈

1 个赞

拜拜┏(^0^)┛dan @linan04129 ,吃饭了

2 个赞

不不不,周晨捷是Tom钱瑞是Jerry猫和老鼠

2 个赞

解决方案给个

2 个赞

6,好吧

1 个赞

你没有输出剩余饱食度

1 个赞

谢谢giegie

2 个赞

输了

2 个赞

哦,雀食,我把Food看成endl

1 个赞


刚截的图

2 个赞

你的代码应该没错

1 个赞

@林品逸 你把体委带错队这件事写成编程题了。。。 :laughing: :laughing: :laughing: 点赞了

2 个赞

你们 @linan04143 @linan04129 你们都是谁啊,我看不到你们真实姓名