栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 4007 Flood

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 4007 Flood

#include<iostream>#include<cstdio>#include<map>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<set>#include<string>#include<queue>#define inf 1<<30#define M 60005#define N 10005#define maxn 300005#define eps 1e-10#define zero(a) fabs(a)<eps#define Min(a,b) ((a)<(b)?(a):(b))#define Max(a,b) ((a)>(b)?(a):(b))#define pb(a) push_back(a)#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson step<<1#define rson step<<1|1#define MOD 1000000009using namespace std;int maze[10][10];int n;int way[4][2]={0,1,0,-1,1,0,-1,0};int vis[10][10];bool check(int x,int y){    if(x<0||y<0||x>=n||y>=n) return false;    return true;}void floodfill(int x,int y,int c){    vis[x][y]=1;    for(int i=0;i<4;i++)    {        int tx=x+way[i][0];        int ty=y+way[i][1];        if(!check(tx,ty)) continue;        if(vis[tx][ty]==1) continue;        if(maze[tx][ty]==c) floodfill(tx,ty,c);        else vis[tx][ty]=2;    }}int get_cnt(int col){    int cnt=0;    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)        { if(maze[i][j]==col&&vis[i][j]==2) {     cnt++;     floodfill(i,j,maze[i][j]); }        }    }    return cnt;}int get_h(){    bool flag[6];mem(flag,false);    int cnt=0;    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)        { if(vis[i][j]!=1&&!flag[maze[i][j]]) {     cnt++;     flag[maze[i][j]]=true; }        }    }    return cnt;}int depth;bool IDAstar(int dep){    if(depth==dep) return get_h()==0;    if(dep+get_h()>depth) return false;    for(int i=0;i<6;i++)    {        int tmp[10][10];        memcpy(tmp,vis,sizeof(vis));        if(get_cnt(i)==0) continue;        if(IDAstar(dep+1)) return true;        memcpy(vis,tmp,sizeof(vis));    }    return false;}int main(){    while(scanf("%d",&n)!=EOF&&n)    {        for(int i=0;i<n;i++)        { for(int j=0;j<n;j++) {     scanf("%d",&maze[i][j]); }        }        mem(vis,0);        floodfill(0,0,maze[0][0]);        depth=get_h();        while(true)        { if(IDAstar(0)) break; depth++;        }        printf("%dn",depth);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号