2011年8月23日
摘要: POJ_1321 这个题目把棋子的坐标依次存进数组里,然后再分别用两个数组记录行和列有哪些已经被占用了,之后便从第一个棋子开始深搜即可,深搜函数带两个参数p,#include<stdio.h>#include<string.h>int qx[70],qy[70],visx[70],visy[70],m,k,ans;char b[70];void dfs(int p,int count){ int i; if(count==k) { ans++; return; } for(i=p;i<m;i++) if(!visx[qx[... 阅读全文
posted @ 2011-08-23 23:35 Staginner 阅读(315) 评论(0) 推荐(0) 编辑
摘要: POJ_3278 这个是个比较简单的BFS的题目。#include<stdio.h>#include<string.h>int dis[200010],q[200010];int main(){ int i,j,N,K,front,rear,n,newn; while(scanf("%d%d",&N,&K)==2) { memset(dis,-1,sizeof(dis)); dis[N]=0; front=rear=0; q[rear++]=N; while(front<rear) { ... 阅读全文
posted @ 2011-08-23 02:44 Staginner 阅读(192) 评论(0) 推荐(0) 编辑
摘要: POJ_3009一开始没有考虑周全,导致做这个题目的时候很是坎坷。首先,石头在移动的过程中,是可能在同一位置出现两次的,因而用vis[][]进行判重是不可取的,同时也正是基于这一点,用dis[][]去记录最短距离也同样是不可取的。其次,由于这个题目一次碰撞会让Block消失,因而会影响下面的操作,所以一般的BFS是行不通的。考虑到上面两点之后,便放弃BFS,而改用DFS。这个题目如果不限定解的深度而直接DFS会超时,所以在DFS过程中要限定解的深度在10及10以内。如果这个题目解的深度更深的话,还可以考虑用叠代加深的方式去DFS。#include<stdio.h>#include& 阅读全文
posted @ 2011-08-23 01:57 Staginner 阅读(358) 评论(0) 推荐(0) 编辑
摘要: POJ_2251 这个题目相比之前做过的BFS遍历迷宫的问题,相当于增加了一维的空间,这样在移动的时候就多了两种选择。#include<stdio.h>#include<string.h>int a[35][35][35],dis[35][35][35],vis[35][35][35];int qx[27010],qy[27010],ql[27010];int dx[]={-1,1,0,0},dy[]={0,0,-1,1};char b[50];int main(){ int i,j,k,L,R,C,front,rear,sx,sy,sl,tx,ty,tl,l,x,y, 阅读全文
posted @ 2011-08-23 00:02 Staginner 阅读(187) 评论(0) 推荐(0) 编辑