poj1562--DFS

一次AC,虽然是水题,虽然算法写得不是很好,但是一次AC还是很爽的。。

//#define LOCAL
#include <stdio.h>
#include <string.h>

#define MAXN 100 + 10

char graph[MAXN][MAXN];

int count;
int m, n;

void DFS(int p, int q);

int main()
{
#ifdef LOCAL
	freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempIn.txt", "r", stdin);
	//freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempOut.txt", "w", stdout);
#endif


    int i, j;
    while(scanf("%d%d", &m, &n) && m != 0)
    {

        // 初始化
        count = 0;
        memset(graph, 0, sizeof(graph));
        
        // 数据输入
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < n; j++)
            {
                scanf("\n%c", &graph[i][j]);
            }
        }
        
        // 算法主体
        for(i = 0; i < m; i++)
            for(j = 0; j < n; j++)
                if(graph[i][j] == '@')
                {
                    DFS(i, j);
                    count++;
                }
        
        // 数据输出
        printf("%d\n", count);
    }

    return 0;
}

void DFS(int p, int q)
{

    if(p >= 0 && p <= m - 1 && q >= 0 && q <= n - 1 && graph[p][q] == '@')
    {
        graph[p][q] = '*';
    }
    else
    {
        return;
    }
        
        DFS(p - 1, q - 1);
        DFS(p - 1, q);
        DFS(p - 1, q + 1);
        DFS(p, q - 1);
        DFS(p, q + 1);
        DFS(p + 1, q - 1);
        DFS(p + 1, q);
        DFS(p + 1, q + 1);
}



你可能感兴趣的:(c,算法,Graph)