P2937 [USACO09JAN] Laserphones S
题解
深搜和广搜的结合,一次性往四个方向打标记
code
#include<bits/stdc++.h>
using namespace std;
string s[105];
int vis[105][105]={0};
int main()
{
int n,m;
cin>>m>>n;
int flag=0,x1,y1;
for(int i=1;i<=n;i++)
{
cin>>s[i];
s[i]=' '+s[i];
for(int j=1;j<=m;j++)
{
if(s[i][j]=='C'&&!flag)
{
flag=1;
x1=i;
y1=j;
}
}
}
vis[x1][y1]=1;
queue<pair<int,int> > q;
q.push(make_pair(x1,y1));
while(q.size())
{
int x=q.front().first,y=q.front().second;
q.pop();
if(s[x][y]=='C'&&(x!=x1||y!=y1))
{
cout<<vis[x][y]-2;
break;
}
for(int i=x+1;i<=n&&s[i][y]!='*';i++)
{
if(!vis[i][y])
{
vis[i][y]=vis[x][y]+1;
q.push(make_pair(i,y));
}
}
for(int i=x-1;i>=1&&s[i][y]!='*';i--)
{
if(!vis[i][y])
{
vis[i][y]=vis[x][y]+1;
q.push(make_pair(i,y));
}
}
for(int i=y+1;i<=m&&s[x][i]!='*';i++)
{
if(!vis[x][i])
{
vis[x][i]=vis[x][y]+1;
q.push(make_pair(x,i));
}
}
for(int i=y-1;i>=1&&s[x][i]!='*';i--)
{
if(!vis[x][i])
{
vis[x][i]=vis[x][y]+1;
q.push(make_pair(x,i));
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~