很显然只有当 X 四周有偶数个 . 才有解。
如果 X 周围只有两个 .,那么直接把这两个 . 连边,然后黑白染色即可。
如果 X 周围有四个 .,猜了一个结论:存在一个上下两个 . 权值相同,左右两个 . 权值相同的解。
手玩了一下感性理解的。我也不知道怎么证((。官方题解没看。
时间复杂度 O(nm)。
3|0代码
#include<bits/stdc++.h>usingnamespace std;
constint N=510,M=1000010;
constint dx[]={0,0,0,1,-1},dy[]={0,1,-1,0,0};
int n,m,tot,a[N][N],b[M],head[M],pos[3];
bool flag;
char ch;
structedge{
int next,to;
}e[M];
intID(int x,int y){
return (x-1)*m+y;
}
voidadd(int from,int to){
e[++tot]=(edge){head[from],to};
head[from]=tot;
swap(from,to);
e[++tot]=(edge){head[from],to};
head[from]=tot;
}
voiddfs(int x,int val){
b[x]=val;
for (int i=head[x];~i;i=e[i].next)
{
int v=e[i].to;
if (!b[v]) dfs(v,5-val);
if (b[x]==b[v]) flag=1;
if (flag) return;
}
}
intmain(){
memset(head,-1,sizeof(head));
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
while (ch=getchar())
if (ch=='.' || ch=='X') break;
if (ch=='X') a[i][j]=1;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j])
{
int sum=4;
for (int k=1;k<=4;k++)
sum-=a[i+dx[k]][j+dy[k]];
if (sum&1) returnprintf("NO"),0;
if (sum==2)
{
int tp=0;
for (int k=1;k<=4;k++)
if (!a[i+dx[k]][j+dy[k]]) pos[++tp]=ID(i+dx[k],j+dy[k]);
add(pos[1],pos[2]);
}
if (sum==4)
{
add(ID(i-1,j),ID(i,j-1)); add(ID(i-1,j),ID(i,j+1));
add(ID(i+1,j),ID(i,j-1)); add(ID(i+1,j),ID(i,j+1));
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (!a[i][j] && !b[ID(i,j)]) dfs(ID(i,j),1);
if (flag) returnprintf("NO"),0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j])
for (int k=1;k<=4;k++)
{
int x=i+dx[k],y=j+dy[k];
if (!a[x][y]) b[ID(i,j)]+=b[ID(x,y)];
}
cout<<"YES\n";
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
cout<<b[ID(i,j)]<<" ";
cout<<"\n";
}
return0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-09-06 【POJ 2778】DNA Sequence