lqb省赛日志[10/37] - [模拟·DFS]

一只小蒟蒻备考蓝桥杯的日志

笔记

map

map< const Key, V> ,Key为键类型,V为键所关联的值的类型

map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已经在容器中,则insert 将不做任何操作。

传递给insert 的实参相当笨拙,可用make_pair 方式简化:

map<string, int> word_count
word_count.insert(make_pair("Anna",1));

备份一下第5题demo

#include <stdio.h>
#include <iostream>

using namespace std;

int N;
int mp[105][105];

int mov[10][3] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};
//direct对应mov左[]下标,排序方向
//1:右   2:下   3:上   4:左
//5:右下   6:左上   7:右上   8:左下

int saved[200][5];
//右边[], [0]=direct, [1]=start_x, [2]=start_y

char character[] = {'y', 'i', 'z', 'h', 'o', 'n', 'g'};
int CNT = 7; //yizhong
//direct=-1, 无方向性

int ans = 0;
void DFS(int x, int y, int direct, int cnt, int sx, int sy) {
	if(CNT == cnt + 1) {
		saved[ans][0] = direct;
		saved[ans][1] = sx;
		saved[ans][2] = sy;
		ans++;
		return;
	}
	
	if(direct == -1) { //无方向性
		for(int i = 0; i < 8; i++) {
			int x1 = x + mov[i][0];
			int y1 = y + mov[i][1];
			
			if(x1 < 0 || x1 >= N || y1 < 0 || y1 >= N) {
				continue;
			}
			
			if(mp[x][y] == character[0]) {
				if(mp[x1][y1] == character[1]) {
					DFS(x1, y1, i, 2, x, y);
				}
			}
			DFS(x1, y1, -1, 0, 0, 0);
		}
	} else {
		int x1 = x + mov[direct][0];
		int y1 = y + mov[direct][1];
		
		if(x1 < 0 || x1 >= N || y1 < 0 || y1 >= N) {
			return;
		}
		
		if(mp[x1][y1] != character[cnt]) {
			return;
		}
		
		DFS(x1, y1, direct, cnt + 1, sx, sy);
	}
	
	return;
}

int main() {
	cin >> N;
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) {
			scanf("%c", &mp[i][j]);
		}
	}
	DFS(0, 0, -1, 0, 0, 0);
	cout << ans << endl;
	return 0;
}

//我顾虑的是自作聪明的direct会不会导致无法全部遍历
//以及return条件不成熟

刷题

  1. P2392 kkksc03考前临时抱佛脚
  2. P1036 [NOIP2002 普及组] 选数
  3. P2036 [COCI2008-2009 #2] PERKET
  4. P1605 迷宫
  5. P1101 单词方阵(未解决)

心得

  1. 因为每个练习都要写,相当于不需要 used 判断,DFS变种(简化版)但是影响到我后面的认知了,,我后面以为不用 for 循环…
  2. 第2题不知道为什么死活过不了
  3. 第3题,常规操作,easy的,一把过
  4. 第4题走迷宫,蠢死我了啊啊啊(尖叫),我傻不拉几还坚定不移地认为一定要把所有位置走一遍而且不重复而且正好走到出口
    DFS:你有病啊
  5. 还没做出来,明天(2024年3月17日)一定

小结

写了四个半小时,,那个迷宫卡我一个小时我恨(¬︿̫̿¬☆)
至少现在可以辨别DFS还是BFS的选择了,捂脸笑,,,
今天的剩下时间要写前端了,告辞,,
也算是,,哇趣,怎么才四个半小时,,我都不好意思说是很努力的一天呜呜呜

“业精于勤荒于嬉,行成于思毁于随”
小蒟蒻一个月,冲省一!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值