摘要: 毫无意义的三维BFS..... 从 S 出发 每次可以选择六个方向 求到 E 的最小移动次数 。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 char maze[31][31][31]; 11 bool MarkMaze[31][31][31]; 12 13 struct P 14 { 15 int l,r,c,step; 16 }sp,ep,tp,np; 17 18 int L,R,C,le... 阅读全文
posted @ 2013-08-20 11:12 好小孩 阅读(147) 评论(0) 推荐(0)
摘要: 百年难得一遇的会做的中文题...... 每一次DFS都有两种状态 放或者不放 简单的DFS模板题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int n,k,sum;10 11 char map[10][10];12 13 bool HashH[10],HashW[10];14 15 void dfs(int h,int w,int kc)16 {17 int i,j;18 19 if(kc == k)20 {21 ... 阅读全文
posted @ 2013-08-20 10:35 好小孩 阅读(231) 评论(0) 推荐(0)
摘要: 字典树 或者 map...... map 8000+ ms 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 14 using namespace std;15 16 struct cmp17 {18 bool operator() (pair a, pair b)19 {20 return a > b;21 ... 阅读全文
posted @ 2013-08-19 21:06 好小孩 阅读(168) 评论(0) 推荐(0)
摘要: 骑士的旅行。 骑士可以每次走一个‘日’字,就像中国象棋里面的马。 给出一个 p*q 的棋盘,每个格子只能走一次,是否存在一种方法可以遍历整个棋盘。如果有多种方法输出字典序最小的。 关于此题中的字典序: 骑士每一次都会有八个方向可以选择,每一次都选择字典序小的来DFS。这样最终结果就是字典序最小的。 int jp[] = {-1, 1,-2, 2,-2, 2,-1, 1}; int jq[] ={-2,-2,-1,-1, 1, 1, 2, 2}; 此为遍历时确定八个方向的数组。 #include #include #include #include #include #inc... 阅读全文
posted @ 2013-08-19 15:57 好小孩 阅读(178) 评论(0) 推荐(0)
摘要: 优先队列水过~~~ 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 int seq[30010];12 13 int main()14 {15 int n,m,i,j,order,top,lastorder;16 17 while(scanf("%d %d",&m,&n) != EOF)18 {19 20 priority_queue q1;21 pr... 阅读全文
posted @ 2013-08-19 10:44 好小孩 阅读(167) 评论(0) 推荐(0)
摘要: 给出N个点,判断可以组成多少个正方形。最后输出正方形的个数。 思路:枚举每两个点,计算出另外的两个点,若另外两点存在则正方形存在。 这样得到的结果是最终结果的二倍,因为每一个正方形均累加了两次。 另外两点的计算方法: 设AC和BD的交点O的坐标为(X0,Y0), 则有 X0 = (X1+X3)/2 , Y 0 = (Y1+Y3)/2; 从图上可以看出: X2-X0 = Y3-Y0, Y2-Y0 = X0-X3; 将上述四式合并得: X2 = (X1+X3+Y3-Y1)/2; Y2 = (Y1+Y3+X1-X3)/2; 同理可得: X4 = (X1+X3-Y3+Y1)... 阅读全文
posted @ 2013-08-15 15:36 好小孩 阅读(235) 评论(0) 推荐(0)
摘要: 取余,邻接表。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 struct N11 {12 int data,ans;13 N *next;14 }*hash[2000001] = {NULL};15 16 int Max = 0,Max_num;17 18 N *creat()19 {20 N *p = (N *)malloc(sizeof(N));21 p->next = NULL;22 ... 阅读全文
posted @ 2013-08-14 20:05 好小孩 阅读(178) 评论(0) 推荐(0)
摘要: 给你N个棍子,每个棍子的两端涂有颜色。两个涂有一种颜色的端点可连在一起。 问这N根棍子是否能连成一条直线。 可以把每个棍子看成一条边,端点为两个节点。则问题转化成所给的这些端点是否连通,若连通是否存在一笔画的问题,即是否存在欧拉回路。 并查集+路径压缩 判断图是否连通。 另在图连通的情况下若不存在度数为奇数的点或有且仅有两个度数为奇数的点,则存在欧拉回路。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int me[51000... 阅读全文
posted @ 2013-08-13 16:49 好小孩 阅读(117) 评论(0) 推荐(0)
摘要: 简单的并查集的应用,统计和 0 联通的点的个数,约等于模板题。。。。。。手残没有判断两个点的根节点是否相等。。。。。贡献了五个WA...... 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int stu[30010],num[30010]; 8 9 int find(int x)10 {11 return stu[x] == x ? x : stu[x] = find(stu[x]);12 }13 14 void merge(int a,int b)15 {16 int fa = f... 阅读全文
posted @ 2013-08-12 15:30 好小孩 阅读(163) 评论(0) 推荐(0)
摘要: 特殊的快速排序——归并排序。 给定N个数,求排成升序序列所需要的最小交换次数。每次只能交换相邻的两个数。 作为一名《线性代数》只考了60+的选手竟然一眼就看出要求逆序数有木有,可是我不会求啊有木有,搞来搞去还是要用归并排序啊有木有。 T^T 归并排序的主要思路: 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取... 阅读全文
posted @ 2013-08-12 10:51 好小孩 阅读(197) 评论(0) 推荐(0)