2016蓝桥杯第7题
来源:互联网 发布:网络传播概论新编 编辑:程序博客网 时间:2024/06/05 19:48
本人不才,dfs没学好。只能先膜拜大神的dfs
#include <stdio.h>#include <string.h>int mpt[3][4];int mpt_visit[3][4];int num[6];int have[13];int visit[13];int ans = 0;int Count = 0;void init(){ int k = 1; for(int i = 0 ; i < 3 ; i ++) for(int j = 0 ; j < 4 ; j ++) { mpt[i][j] = k; k++; }}int dir[4][2] = {0,1,0,-1,-1,0,1,0};void dfs_find(int x,int y)//判断五个数是否能连在一起{ for(int i = 0 ; i < 4 ; i++) { int tx,ty; tx = x + dir[i][0]; ty = y + dir[i][1]; if(tx < 0 || tx >= 3 || ty < 0 || ty >= 4) continue; if(have[mpt[tx][ty]] == 0 || mpt_visit[tx][ty]) continue; mpt_visit[tx][ty] = 1; Count ++; dfs_find(tx,ty); }}void Solve(){ int i; memset(have,0,sizeof(have)); memset(mpt_visit,0,sizeof(mpt_visit)); for(i = 1; i < 6 ; i ++) have[num[i]] = 1; for(i = 0 ; i < 12 ; i ++) { int x,y; x = i / 4; y = i % 4; if(have[mpt[x][y]]) { Count = 1; mpt_visit[x][y] =1; dfs_find(x,y); break; } } if(Count == 5) { ans ++; }}//创建5个数的组合void dfs_creat(int index){ if(index == 6) { Solve(); return; } for(int i = num[index-1] + 1; i < 13 ; i ++) { if(!visit[i]) { visit[i] = true; num[index] = i; dfs_creat(index+1); visit[i] = false; } }}int main(){ init(); dfs_creat(1); printf("%d\n",ans); return 0;}
0 0
- 2016蓝桥杯第7题
- 2016 第七届 蓝桥杯第7题 剪邮票(bfs+dfs)
- 蓝桥杯第7题
- 蓝桥杯第1,5,7题
- 蓝桥杯第4届第二题
- 蓝桥杯第4届第9题
- 蓝桥杯第5届第10题
- 蓝桥杯第4届第10题
- 蓝桥杯第5届第8题
- 蓝桥杯第8题,直接暴力,三个循环
- 【备战蓝桥杯第7天】复习面向对象…
- 2016——3——16 kmp 7题
- 蓝桥杯第一天
- 2016-7
- 2016-7-7 杂感
- 2016级计算机C++助教工作(7)第一次上机题
- 蓝桥杯第-1天
- 日志2016-1-7
- 关系型数据库中的范式问题?
- iOS数据持久化 归档
- 使用tempest测试openstack
- Log4j 使用详细教程
- 应用内动态下载苹果提供的多种中文字体
- 2016蓝桥杯第7题
- 学习理论-模型选择-2-训练样本数量与误差上界
- oracle 数据库查询排序小结
- Oracle Data Recovery Advisor(DRA)
- HDFS上读写数据的流程解释
- Android源码解析之(八)-->Zygote进程启动流程
- 多变量线性回归
- Linux分区
- 在线补丁的激活方法、装置及系统