![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
bfs+dfs
文章平均质量分 51
秋天的风--
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
展开
-
hdu 1548
#include #define N 300 #define inf 999999999 int 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 · 642 阅读 · 0 评论 -
hdu 1689 求奇环bfs关键是层次图
#include #include #include #include using namespace std; #define inf 0x3fffffff #define N 1100 #define NN 21000 struct node { int u,v,next; }bian[NN*2]; int head[N],yong; void init() { memset(head,-1,原创 2014-11-12 11:20:48 · 699 阅读 · 0 评论 -
bzoj 1088 简单dfs
/* 题意:给你一列只能取0和1的数。 限制:每3个相邻的数的值固定,开头和结尾只限制两个数 求:有多少种组合方案 解:搜索,在开头和结尾再加一个只能取零的数,直接判断是否符合条件即可 */ #include #include #include using namespace std; #define N 11000 int sum; int dp[N]; int a[N],n; void df原创 2014-11-12 15:22:20 · 807 阅读 · 1 评论 -
zoj 2110 很好的dfs+奇偶剪枝
//我刚开始竟然用bfs做,不断的wa,bfs是用来求最短路的而这道题是求固定时间的 //剪纸奇偶剪枝加dfs #include #include #include #include using namespace std; #define N 10 char ma[N][N]; struct node { int x,y,step; }ss,tt; int dis[4][2]={1,0,-1,原创 2014-09-16 16:48:48 · 754 阅读 · 0 评论 -
hdu 5040bfs+优先队列 需要存状态
/* 剪枝:四秒后状态会变得和原来一样,所以四秒后如果再经过这个点肯定不是最优的舍去 易错点:在一个是从.到.这两个点都没有被照到并且不是摄像机,也可能需要等3秒,因为后面的结果可能再这三秒中发生改变,要单独判断 */ #include #include #include #include #include using namespace std; #define N 510 char s[N][原创 2014-09-24 10:22:10 · 953 阅读 · 0 评论 -
zoj 1649 bfs
/*步数最小的不一定是时间最少的 常规的bfs只能求出步数最少的。 而在这题中一个点可以多次走,所以必须记录最优的那个值 */ #include #include #include using namespace std; #define inf 0x3fffffff #define N 300 char s[N][N]; struct node { int x,y,step,time; }s原创 2014-09-19 11:27:54 · 502 阅读 · 0 评论 -
zoj 1008 暴力枚举求解dfs+优化
/* 现将相同的合并计数。 再枚举判断是否符合当cou==n*n是符合就退出 */ #include #include #define N 900 int 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 · 577 阅读 · 0 评论 -
hdu 1716 深搜dfs
#include #include #include #define N 5 int 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 · 510 阅读 · 0 评论 -
nyoj 20水
#include #include #define N 110000 struct 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 · 512 阅读 · 0 评论 -
hdu 2102 bfs
#include #include #include #define N 20 using 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 · 498 阅读 · 0 评论 -
uva 11624
#include #include #include using namespace std; #define N 1100 struct 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 · 490 阅读 · 0 评论 -
nyoj 306 二分+dfs
#include #include #define N 200 int 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 · 606 阅读 · 0 评论 -
nyoj306 二分+dfs
原题连接:点击打开链接 题意:从(1,1)点到(n,n)找一条路径(只能上下左右走),使路径上最大点与最小点差值最小。。 思路分析: (1):这题和我们以前做的迷宫题差别很大,以前做的一般就是求 最小步数或代价最小,一个dfs或bfs即可,而此题是求最大点与最小点差。 www.2cto.com (2):分析看出,一次dfs和bfs对我等弱菜来说显然不可(大牛或许可以)。 (3):若直转载 2014-04-15 16:15:11 · 633 阅读 · 0 评论 -
hdu 2181暴搜
#include #include #define N 30 int 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;i if(map[n][i]==end&&count==19) {//如果下一个点就是起始点并且是原创 2013-11-13 15:06:38 · 709 阅读 · 0 评论 -
fzu 2124
#include #include #include #include #include #include using namespace std; #define N 30 char 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 · 570 阅读 · 0 评论 -
hdu 4474
//因为n是小于等于10000可以利用这点进行搜索对n取余则余数为零时就为所找的。因为他的余数肯定小于10000所以不会无休止下去 #include #include #include #include #include #define N 1111111 using namespace std; int pre[N],now[N],a[20]; void find(int k)原创 2013-11-08 16:21:48 · 671 阅读 · 0 评论 -
hdu 2579
#include #include #include #include #include #define N 200 using 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 · 776 阅读 · 0 评论 -
hdu 4771好题
#include #include//通过只记录每一步此时点的状态。 #include using namespace std; #define N 110 int 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 · 773 阅读 · 0 评论 -
hdu 4435 bfs+贪心
/* 题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。 建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限, 但是汽车油箱有上限d(加满油可以跑距离d)。 第i个点的费用=比i小的点的所有费用和+1; 所以从后向前判断,如果当前点不为加油站在这个点前原创 2014-11-01 16:50:45 · 531 阅读 · 0 评论