題意:在一個網格矩陣中尋找不同油礦 , 當遇到“@”時 , 這個點上 下 左 右 斜角上是“@”的點屬於同一個油礦。找到最多一次能連接幾個油礦。
思路:深度優先搜索,遞歸。
感想:雖然是個講過的例題,但自己寫出來也是有自豪感。
代碼:
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
char grid[101][101];
bool flag[101][101];
int dir[][2] = {{-1,1} , {0,1} , {1,1} , {1,0} , {1,-1} , {0,-1} , {-1,-1} , {-1,0}};
void DFS(int x,int y,int m,int n)
{
flag[x][y] = true;
for(int i=0;i<8;i++)
{
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if(xx >= 0 && xx < m && yy >= 0 && yy < n && !flag[xx][yy] && grid[xx][yy] == ‘@')
DFS(xx,yy,m,n);
}
}
int main()
{
int m , n , count;
int i , j;
while(cin >> m >> n && m+n)
{
memset(flag,false,sizeof(flag));
for(i = 0; i < m; i++)
for(j=0; j < n; j++)
cin >> grid[i][j];
count = 0;
for(i = 0; i < m; i++)
for(j=0;j<n;j++)
{
if(grid[i][j] == '@' && !flag[i][j])
{