poj 1154
2013-12-10 11:14
211 查看
第一阶段未懂回溯 #include <iostream> #include <fstream> #include <cstring> using namespace std; const int MAXN=30; char maze[MAXN][MAXN]; int vis[MAXN][MAXN]; int counter=0; int letter[26]; void DFS(int x,int y) { if(vis[x][y] || maze[x][y]=='#' || letter[maze[x][y]-65]==1)return ; vis[x][y]=1; counter++; letter[maze[x][y]-65]=1; DFS(x-1,y); DFS(x,y-1); DFS(x+1,y); DFS(x,y+1); } int main() { //cout << "Hello world!" << endl; //freopen("input.txt","r",stdin); int R,C; while(cin>>R>>C) { memset(vis,0,sizeof(vis)); memset(maze,'#',sizeof(maze)); memset(letter,0,sizeof(letter)); for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) { cin>>maze[i][j]; } } DFS(1,1); cout<<counter<<endl; //output maze /* for(int i=0;i<=R+1;i++) { for(int j=0;j<=C+1;j++) { cout<<maze[i][j]; } cout<<endl; }*/ //fclose(stdin); } return 0; }
第二阶段应用回溯
#include <iostream> #include <fstream> #include <cstring> #include <cstdio> using namespace std; const int MAXN=30; char map[MAXN][MAXN]; int vis[MAXN][MAXN]; int letter[26]; int sum=1; int total=0; int Dir_x[4]={0,1,0,-1}; int Dir_y[4]={-1,0,1,0}; int R,C; void DFS(int x,int y) { vis[x][y]=1; int nextx,nexty; if(sum>total)total=sum; for(int i=0;i<4;i++) { nextx=x+Dir_x[i]; nexty=y+Dir_y[i]; if(nextx>=0 && nextx<R && nexty>=0 && nexty<C && !letter[map[nextx][nexty]-'A'] && !vis[nextx][nexty]) { letter[map[x][y]-'A']=1; sum++; DFS(nextx,nexty); sum--; letter[map[x][y]-'A']=0; vis[x][y]=0; } } } int main() { //cout << "Hello world!" << endl; //freopen("input.txt","r",stdin); //while(scanf("%d %d",&R,&C)==2) cin>>R>>C; { //if(R==0 || C==0)break; memset(letter,0,sizeof(letter)); memset(vis,0,sizeof(vis)); //memset() for(int i=0;i<R;i++) { for(int j=0;j<C;j++) { cin>>map[i][j]; } } DFS(0,0); cout<<total<<endl; } //fclose(stdin); return 0; }
相关文章推荐
- poj 1154 LETTERS
- POJ 1154 LETTERS DFS+回溯
- POJ 1154 LETTERS 笔记
- poj 1154 dfs
- poj 1154 LETTERS dfs入门题
- POJ 1154题解,此题不难理解方法就是DFS,属于水题。不过有一些细节要注意。
- poj 1154 LETTERS
- !POJ 1154--DFS(WA了20次)
- poj 1154 LETTERS(DFS水!)
- poj 1154 LETTERS
- POJ 1154 解题报告
- hdu 1154 poj 2462 Cutting a polygon 计算几何
- POJ1154(DFS回溯)
- POJ ACM 1154
- poj 1154 LETTERS(深搜)
- poj 1154 LETTERS
- POJ 2462 / HDU 1154 Cutting a Polygon
- poj1154
- poj 2462 / hdu 1154 Cutting a polygon 线段在多边形内长度
- poj dfs相关之1154 LETTERS