zoj 3864 Quiz for EXO-L(level 1)(bfs)
题目链接
题意:
给你一种转换方法,你要把转换的结果还原成一个n*n的矩阵
然后识别这个n*n的矩阵里面的图案是上述哪一个图案,输出那个人的名字。
矩阵只有0(黑色),1(白色)组成
解析:
这个跟之前百度之星的识别0,1的做法一样,还百度之星那个难一点。因为这道题保证图案不会碰到边界
那么就找白的联通块个数和黑的连通块个数。但是样例给的那两个图案,黑白连通块的个数是一样的....
那么只能通过黑点/所有点的比例来判断了(这也是为什么样例要选择这两个图案...)
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int N = 1E3+10;int mp[N][N];
int vis[N][N];
int n;
typedef pair PII;
int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};PII find_(int x)
{PII s;s.first=s.second=-1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!vis[i][j]&&mp[i][j]==x){s.first=i;s.second=j;return s;}}}return s;}
queue mq;int bfs(PII s,int flag)
{while (!mq.empty())mq.pop();mq.push(s);vis[s.first][s.second]=1;while (!mq.empty()){PII u=mq.front();mq.pop();for(int i=0;i<8;i++){PII now;now.first=u.first+dir[i][0];now.second=u.second+dir[i][1];if(now.first>=1&&now.first<=n&&now.second>=1&&now.second<=n&&!vis[now.first][now.second]){if(mp[now.first][now.second]==flag){vis[now.first][now.second]=1;mq.push(now);}}}}return 1;
}int main()
{int t;scanf("%d",&t);while(t--){memset(vis,0,sizeof(vis));int m;scanf("%d%d",&n,&m);int row=0;int flag=1;//ofstream ofs;//ofs.open("G:\\pic.txt");int sh=N;int xh=0;int lw=N;int rw=0;int k=1;int zero=0;for(int i=1;i<=m;i++){int tmp;scanf("%d",&tmp);for(int j=1;j<=tmp;j++){//ofs<=10) printf("Kai\n");else if(k1==4) printf("Tao\n");else printf("Suho\n");}else if(k0==5){if(k1==8) printf("Luhan\n");else if(k1==1) printf("Chanyeol\n");else if(zero*1.0/(n*n)>0.18) printf("Sehun\n");else printf("Xiumin\n");}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
