
bfs+dfs
文章平均质量分 51
秋天的风--
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
展开
-
hdu 1548
#include#define N 300#define inf 999999999int map[N][N],path[N],dis[N],n;void dijkstra(int v0,int vn) { int visit[N]; int min,w,i,j; for(i=1;i visit[i]=0; di原创 2013-10-31 16:16:11 · 677 阅读 · 0 评论 -
hdu 1689 求奇环bfs关键是层次图
#include#include#include#includeusing namespace std;#define inf 0x3fffffff#define N 1100#define NN 21000struct node {int u,v,next;}bian[NN*2];int head[N],yong;void init() {memset(head,-1,原创 2014-11-12 11:20:48 · 734 阅读 · 0 评论 -
bzoj 1088 简单dfs
/*题意:给你一列只能取0和1的数。限制:每3个相邻的数的值固定,开头和结尾只限制两个数求:有多少种组合方案解:搜索,在开头和结尾再加一个只能取零的数,直接判断是否符合条件即可*/#include#include#includeusing namespace std;#define N 11000int sum;int dp[N];int a[N],n;void df原创 2014-11-12 15:22:20 · 841 阅读 · 1 评论 -
zoj 2110 很好的dfs+奇偶剪枝
//我刚开始竟然用bfs做,不断的wa,bfs是用来求最短路的而这道题是求固定时间的//剪纸奇偶剪枝加dfs#include#include#include#includeusing namespace std;#define N 10char ma[N][N];struct node {int x,y,step;}ss,tt;int dis[4][2]={1,0,-1,原创 2014-09-16 16:48:48 · 783 阅读 · 0 评论 -
hdu 5040bfs+优先队列 需要存状态
/*剪枝:四秒后状态会变得和原来一样,所以四秒后如果再经过这个点肯定不是最优的舍去易错点:在一个是从.到.这两个点都没有被照到并且不是摄像机,也可能需要等3秒,因为后面的结果可能再这三秒中发生改变,要单独判断*/#include#include#include#include#includeusing namespace std;#define N 510char s[N][原创 2014-09-24 10:22:10 · 985 阅读 · 0 评论 -
zoj 1649 bfs
/*步数最小的不一定是时间最少的常规的bfs只能求出步数最少的。而在这题中一个点可以多次走,所以必须记录最优的那个值*/#include#include#includeusing namespace std;#define inf 0x3fffffff#define N 300char s[N][N];struct node {int x,y,step,time;}s原创 2014-09-19 11:27:54 · 532 阅读 · 0 评论 -
zoj 1008 暴力枚举求解dfs+优化
/*现将相同的合并计数。再枚举判断是否符合当cou==n*n是符合就退出*/#include#include#define N 900int en[N][4],num[N],real[N][4],len,n,ok;void pp(int a[4],int b[4])//赋值{ a[0]=b[0]; a[1]=b[1]; a[2]=b[2]; a原创 2014-09-18 13:43:51 · 605 阅读 · 0 评论 -
hdu 1716 深搜dfs
#include#include#include#define N 5int f[N];int visit[N];int vis[10000];void dfs(int sum,int k) { int i; if(k==4) { if(vis[sum]==0) vis[sum]=1; return ; } for(i=0;i原创 2014-06-29 10:03:49 · 540 阅读 · 0 评论 -
nyoj 20水
#include#include#define N 110000struct node {int u,v,next;}bian[N*2];int head[N],yong,pre[N];void addedge(int u,int v) {bian[yong].u=u;bian[yong].v=v;bian[yong].next=head[u];head[u]=yong++;原创 2014-05-20 19:41:24 · 540 阅读 · 0 评论 -
hdu 2102 bfs
#include#include#include#define N 20using namespace std;int dis[4][2]={1,0,-1,0,0,1,0,-1};int n,m,t;struct node {int x,y,time,f;};char ma[2][N][N];int visit[2][N][N];int judge(int x,int y,原创 2014-05-21 20:48:54 · 532 阅读 · 0 评论 -
uva 11624
#include#include#includeusing namespace std;#define N 1100struct nodde {int x,y;}f[N],start;int h,n,m,visitt[N][N];int dis[4][2]={-1,0,1,0,0,1,0,-1};char str[N][N];struct node {原创 2014-05-05 23:43:48 · 524 阅读 · 0 评论 -
nyoj 306 二分+dfs
#include#include#define N 200int Min(int a,int b) {return a>b?b:a;}int Max(int a,int b) {return a>b?a:b;}int map[N][N],flag,visit[N][N],n,min,max;int dis[4][2]={1,0,-1,0,0,1,0,-1};原创 2014-04-15 16:53:30 · 640 阅读 · 0 评论 -
nyoj306 二分+dfs
原题连接:点击打开链接题意:从(1,1)点到(n,n)找一条路径(只能上下左右走),使路径上最大点与最小点差值最小。。思路分析:(1):这题和我们以前做的迷宫题差别很大,以前做的一般就是求 最小步数或代价最小,一个dfs或bfs即可,而此题是求最大点与最小点差。 www.2cto.com(2):分析看出,一次dfs和bfs对我等弱菜来说显然不可(大牛或许可以)。(3):若直转载 2014-04-15 16:15:11 · 663 阅读 · 0 评论 -
hdu 2181暴搜
#include#include#define N 30int map[N][4],total;void dfs(int n,int count,int end,int path[N],int h[N]) {int i;path[count]=n;//记录for(i=0;iif(map[n][i]==end&&count==19) {//如果下一个点就是起始点并且是原创 2013-11-13 15:06:38 · 740 阅读 · 0 评论 -
fzu 2124
#include#include#include#include#include#includeusing namespace std;#define N 30char map[N][N];struct node {double t;int x,y,f;friend bool operator return a.t>b.t;原创 2014-03-11 18:25:41 · 604 阅读 · 0 评论 -
hdu 4474
//因为n是小于等于10000可以利用这点进行搜索对n取余则余数为零时就为所找的。因为他的余数肯定小于10000所以不会无休止下去#include#include#include#include#include#define N 1111111using namespace std;int pre[N],now[N],a[20];void find(int k)原创 2013-11-08 16:21:48 · 707 阅读 · 0 评论 -
hdu 2579
#include#include#include#include#include#define N 200using namespace std;struct node { int x,y,time;}start,end,cur,next;char map[N][N];int visit[N][N][N],k,r,c;int dis[4][2]={{1,0},{-1,原创 2013-11-07 18:02:30 · 813 阅读 · 0 评论 -
hdu 4771好题
#include#include//通过只记录每一步此时点的状态。#includeusing namespace std;#define N 110int map[N][N][30];//一共最多16种状态,记录状态和此时已得到宝物的多少char ma[N][N];//读入struct node {int x,y,t,h;};int chu[N][N];//原创 2013-11-18 20:35:29 · 813 阅读 · 0 评论 -
hdu 4435 bfs+贪心
/*题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限,但是汽车油箱有上限d(加满油可以跑距离d)。第i个点的费用=比i小的点的所有费用和+1;所以从后向前判断,如果当前点不为加油站在这个点前原创 2014-11-01 16:50:45 · 566 阅读 · 0 评论