随笔分类 -  ACM_深度优先搜索

摘要:#include<stdio.h>#include<string.h>int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};char a[100][100];int sum,w,h;void sousuo(int x,int y){ int next_x,next_y; for(int i=0;i<=3;i++) { next_x=x+dir[i][0]; next_y=y+dir[i][1]; if(next_x<0||next_x>=h||next_y<0||next_y>=w) continue; if( 阅读全文
posted @ 2013-04-14 15:49 宛如 阅读(106) 评论(0) 推荐(0)
摘要:#include<stdio.h>#include<string.h>int dir[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};int z;char a[110][110];int b[110][110];void sousuo(int xi,int xj){ for(int i=0;i<=7;i++) { if(a[xi+dir[i][0]][xj+dir[i][1]]=='@'&&b[xi+dir[i][0]][xj+dir[i][1]]==0) 阅读全文
posted @ 2013-04-14 15:48 宛如 阅读(132) 评论(0) 推荐(0)
摘要://也可以用生成树的思想做,但要注意是有向边 //生成树的做法:http://blog.sina.com.cn/s/blog_64107d290100h59k.html#include<stdio.h>#include<string.h>int s,e,flag;int vis[10009],map[1009][1009];void dfs(int a){ int i; if(a==e) flag=1; if(flag) return; vis[a]=1; for(i=0;i<26;i++) { if(map[a][i]&&!vis[i]) dfs 阅读全文
posted @ 2013-04-14 15:47 宛如 阅读(165) 评论(0) 推荐(0)
摘要:#include<stdio.h>int n;int a[50],b[25],c[25];void dfs(int j){ int i; if(j==n&&a[c[n]+1]==1) { for(i=1;i<=n;i++) { if(i==1)printf("%d",c[i]); else printf(" %d",c[i]); } printf("\n"); } for(i=2;i<=n;i++)//将剩下的未选的数历遍查找符合条件的,都查找过了就会结束 { if(b[i]!=0&&a 阅读全文
posted @ 2013-04-14 15:45 宛如 阅读(131) 评论(0) 推荐(0)
摘要:奇偶剪枝:把map看作0 1 0 1 0 11 0 1 0 1 00 1 0 1 0 11 0 1 0 1 00 1 0 1 0 1从 0->1 需要奇数步从 1->0 需要偶数步那么设所在位置 (si,sj) 与 目标位置 (di,dj)如果abs(si-sj)+abs(di-dj)为偶数,则说明 abs(si-sj) 和 abs(di-dj)的奇偶性相同,需要走偶数步如果abs(si-sj)+abs(di-dj)为奇数,那么说明 abs(si-sj) 和 abs(di-dj)的奇偶性不同,需要走奇数步理解为 abs(si-sj)+abs(di-dj) 的奇偶性就确定了所需要的步 阅读全文
posted @ 2013-04-14 15:44 宛如 阅读(209) 评论(0) 推荐(0)