DFS相关专题练习——POJ 1979, POJ3009, C++ 代码实现

  1. POJ 1979:Red and Black http://poj.org/problem?id=1979
    一道简单的DFS入门题,主要需要注意的地方就是输入输出的方式:输入是 scanf 按行读入而非按字符读入;输出需要针对多个输入时给出结果,使用while循环来实现。
#include 
#include 

using namespace std;
int w, h, ans, sx, sy;
const int maxn = 25;
char tile[maxn][maxn];

void dfs(int m, int n)
{
    int a[4] = {-1, 0, 0, 1}, b[4] = {0, -1, 1, 0};
    for(int i=0; i<4; ++i)
    {
        int x = m + a[i], y = n + b[i];
        if(x>=0 && x=0 && y
  1. POJ 3009:Curling 2.0 http://poj.org/problem?id=3009
    这道题是DFS的变形题,加了一些条件设置,实现代码时按模块编写,每一部分完成相应的功能,这样写出来的代码会更清晰,也容易检查错误。
#include 
#include 
#include 

using namespace std;
const int maxn = 25;

int data[maxn][maxn];
int sx, sy, gx, gy, w, h;
int ans;
void dfs(int x, int y, int sum);
void judge(int x, int y, int dx, int dy, int sum){
    while(x+dx>=0 && x+dx=0 && y+dy=0 && x+dx=0 && y+dy=h || y>=w || sum>10) return;
    if(x>=0 && x=0 && y-1=0 && x=0 && y+1=0 && x-1=0 && y=0 && x+1=0 && y10) printf("-1\n");
        else printf("%d\n", ans);
    }
    return 0;
}

你可能感兴趣的:(C++)