POJ NO.3050 Hopscotch(DFS,set)
2016-02-17 19:43
471 查看
问题描述:
给你一个5 * 5的矩阵,从某点出发(出发点可以回去),移动6次(上下左右皆可移动)。问通过移动6次总共可以构成多少个不同的串。
题目链接:POJ NO.3050
思路:
把每个点都跑一遍DFS, 然后把移动6次后的数存进序列。
用到了set,很简单。
代码:
给你一个5 * 5的矩阵,从某点出发(出发点可以回去),移动6次(上下左右皆可移动)。问通过移动6次总共可以构成多少个不同的串。
题目链接:POJ NO.3050
思路:
把每个点都跑一遍DFS, 然后把移动6次后的数存进序列。
用到了set,很简单。
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<stack> #include<cstring> #include<algorithm> #include<set> #define INF 0x3f3f3f3f #define MAX 100 #define PI 3.1415926 using namespace std; set<int> p; int a[5][5], x[4] = {-1, 0, 1, 0}, y[4] = {0, 1, 0, -1}; void dfs(int i, int j, int l, int num){ if(l == 6){ p.insert(num); return; } if((0 <= i && i < 5) && (0 <= j && j < 5)){ for(int k = 0; k < 4;k++){ int mx = i + x[k], my = j + y[k]; dfs(mx, my, l+1, (num+a[i][j])* 10); } }else return; } int main(){ for(int i = 0; i < 5; i++) for(int j = 0; j < 5; j++) cin >> a[i][j]; for(int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ dfs(i, j, 0, 0); } } int cnt = p.size(); cout << cnt << endl; return 0; }
相关文章推荐
- linux系统的用户空间和内核空间
- linux小白学习笔记(三)文件类型及权限
- IDEA 设置jrebel监控目录
- Linux 线程同步的三种方法
- VS2010 + OpenCV2.3.1打开多个摄像头
- 第十二课:OpenGL扩展
- OpenStack Juno实例迁移resize:nova ssh无密码计算节点互连
- Linux 系统 常用 命令学习(1)
- linux 命令
- linux进程间通讯-System V IPC 信号量
- 基于lua+nginx的abtest系统
- Linux文件描述符与打开文件之间的区别(转载)
- 垂直型爬虫架构设计(3)
- 分库分表策略的可实现架构
- Android内存解析(一)—从Linux系统内存逐步认识Android应用内存
- window.open()方法
- 大型网站的灵魂- 性能
- 配置tomcat jvm 及cpu查看
- 大型网站架构不得不考虑的10个问题
- Linux经常使用命令大全