poj_1154_回溯基础题
2013-05-02 10:25
288 查看
题目描述:
给一个矩阵列,矩阵元素为大写字母。起点为矩阵第一行第一列那格。看看走不重复的字母最多能走多少格。
解题思路:
回溯,没啥好说。。。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 21
char str
;
int max=0,f[27];
int r,c,count;
void find(int i, int j)
{
if(i>r)
{
if(count > max)
max = count;
}
else
{
if(i>=2 &&
f[str[i-1][j]-'A']==1)
{
f[str[i-1][j]-'A']=0;
count ++;
find(i-1,j);
count --;
f[str[i-1][j]-'A']=1;
}
if(i<=r-1 &&
f[str[i+1][j]-'A']==1)
{
f[str[i+1][j]-'A']=0;
count ++;
find(i+1,j);
count --;
f[str[i+1][j]-'A']=1;
}
if(j>=1 &&
f[str[i][j-1]-'A']==1)
{
f[str[i][j-1]-'A']=0;
count ++;
find(i,j-1);
count --;
f[str[i][j-1]-'A']=1;
}
if(j<c-1 &&
f[str[i][j+1]-'A']==1)
{
f[str[i][j+1]-'A']=0;
count ++;
find(i,j+1);
count --;
f[str[i][j+1]-'A']=1;
}
find(r+1,c);
}
给一个矩阵列,矩阵元素为大写字母。起点为矩阵第一行第一列那格。看看走不重复的字母最多能走多少格。
解题思路:
回溯,没啥好说。。。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 21
char str
;
int max=0,f[27];
int r,c,count;
void find(int i, int j)
{
if(i>r)
{
if(count > max)
max = count;
}
else
{
if(i>=2 &&
f[str[i-1][j]-'A']==1)
{
f[str[i-1][j]-'A']=0;
count ++;
find(i-1,j);
count --;
f[str[i-1][j]-'A']=1;
}
if(i<=r-1 &&
f[str[i+1][j]-'A']==1)
{
f[str[i+1][j]-'A']=0;
count ++;
find(i+1,j);
count --;
f[str[i+1][j]-'A']=1;
}
if(j>=1 &&
f[str[i][j-1]-'A']==1)
{
f[str[i][j-1]-'A']=0;
count ++;
find(i,j-1);
count --;
f[str[i][j-1]-'A']=1;
}
if(j<c-1 &&
f[str[i][j+1]-'A']==1)
{
f[str[i][j+1]-'A']=0;
count ++;
find(i,j+1);
count --;
f[str[i][j+1]-'A']=1;
}
find(r+1,c);
}
相关文章推荐
- POJ1154(DFS回溯)
- poj 2407 Relatives 【容斥原理基础题】
- POJ 1573 Robot Motion (模拟+不回溯的dfs 水题)
- POJ 1321 棋盘问题(dfs回溯)
- POJ——1321棋盘问题(DFS+回溯)
- poj 3468 线段树区间更新(基础,模板)
- poj 1125 基础Floyd
- POJ 3046 Ant Counting(多重集组合数)(基础组合dp)
- POJ 1154 LETTERS
- POJ - 1386 Play on Words(基础欧拉回路)
- POJ 1270 Following Orders (拓扑 + DFS回溯)
- poj 3264 Balanced Lineup(基础线段树)
- POJ1308-----并查集基础题
- POJ 3050 Hopscotch【DFS带回溯】
- poj 3660 Cow Contest floyd 传递闭包!!基础
- poj 1039 Pipe(几何基础)
- poj1363 Rails--栈基础应用
- Poj1611 The Suspects 并查集基础题
- POJ--2486--Apple Tree--树形回溯DP
- poj 2777 ——线段树基础