随笔分类 -  DFS 与 BFS

摘要:该题是一个DFS的应用,该题的关键在于建立一个结构体来存储要你填入的数据,这要就不会像无头苍蝇一样乱搜索,同时也会剪枝不少;同时就是判断横竖不能又重复的,也就是不能等于你要填入的数据,还有一点就是每个小3*3的矩阵要是1-9不能重复,这里就对该坐标x/3*3就可以了;#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ int x,y; }q[100];int map[9][9],res,flag;bool judge( int n,int num ){ for( int i=0; 阅读全文
posted @ 2011-09-21 21:33 wutaoKeen 阅读(233) 评论(0) 推荐(0)
摘要:刚开始知道要用记忆化搜索,然而自己仍然去试了一下暴力DFS,TLE之后我就死心了,就利用记忆化搜索,就是用一个标记hash标记已经拜访过的;#include<stdio.h>#include<stdlib.h>#include<string.h>char num1[224],num2[224],num3[424];int len1,len2,len3,flag,hash[224][224];void DFS( int a,int b,int c ){ if( len3==c ) { flag=1; return ; } if(... 阅读全文
posted @ 2011-09-17 19:41 wutaoKeen 阅读(191) 评论(0) 推荐(0)
摘要:该题是一道记忆化搜索,这题与HDU 1248 漫步校园是一样的,这里不解释了。#include<stdio.h>#include<stdlib.h>#include<string.h>const int inf=0x7fffffff;struct t{ int x,y; }q[1000024];int n,m,hash[1024],dis[1024],map[1024][1024];void empty(){ for( int i=0;i<=n;i++ ) { hash[i]=0; dis[i]=inf; ... 阅读全文
posted @ 2011-09-17 16:44 wutaoKeen 阅读(153) 评论(0) 推荐(0)
摘要:刚开DIY做这题时以为就是一个简单的BFS题目,后来才知道这是一题记忆化搜索题目,用一个简单的公式就是:记忆化搜索=搜索形式+动态规划的思想;这题的思想就是:先用BFS求出n到任何一点的最短距离(跟迪杰斯特拉一样),这就是利用了动态规划的思想;然后,再用DFS进行搜索,这里就要就行记忆化的搜索,具体就是,如果到该点的最短距离的路的条数已经知道那么就不需要再往下求了。#include<stdio.h>#include<stdlib.h>#include<string.h>constint inf=0x7fffffff;struct node{ int x,y; 阅读全文
posted @ 2011-09-17 09:58 wutaoKeen 阅读(433) 评论(0) 推荐(0)
摘要:该题我直接用的暴力搜索,因为之最大只有4*4,这个题最重要的是标记;#include<stdio.h>#include<stdlib.h>int max,map[6][6];int flagx(int i,int j, int n){ int re=0; for( int k=i;k<n;k++ ) { if( map[k][j]=='X' ) break; if( map[k][j]=='.' ) { map[k][j]=i; re++; ... 阅读全文
posted @ 2011-09-06 15:34 wutaoKeen 阅读(149) 评论(0) 推荐(0)
摘要:用dfs会超时,而且BFS不剪枝的话也会超时。。。三维搜索。。。搜索题,三维BFS,设定前后上下左右6个方向搜索1.刚开始一直WA,我就一直找不出错误,后来在看这个题时才发现自己犯了个严重的错误,刚开我就把城堡四周赋值为1,后来就没这样初始化了;现在想想吧太不应该了;2、要认清剪枝的重要性,剪枝非常有利于提高代码的效率,就这题而言,若没有if(a+b+c-3>t) {printf("-1\n");continue;}(起点与终点间最短路径大于时间限度),虽然没超时;#include<stdio.h>#include<stdlib.h>struc 阅读全文
posted @ 2011-09-05 14:43 wutaoKeen 阅读(221) 评论(0) 推荐(0)
摘要:该题TLE了几次,后来才发现要用奇偶剪纸,如果起点到终点的步数为偶数那么不管你怎样走,步数一定为偶数;#include<stdio.h>#include<stdlib.h>#include<string.h>char map[10][10];int flag,M,N;int d[8]={ -1,0,0,1,1,0,0,-1 };void DFS( int x,int y,int n,int T ){ // printf( "afsad" ); if( flag || n>=T ) return; for( int k=0;k< 阅读全文
posted @ 2011-09-04 11:08 wutaoKeen 阅读(163) 评论(0) 推荐(0)