杭电acm网站1010 一道搜索题 求个能ac的代码!谢谢大牛们!

 我来答
xiaoruige123
2013-03-25 · TA获得超过685个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:297万
展开全部
注意剪枝 已AC过的 求采纳!>_<
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

char c[10][10];
int n,m,t;
int wall;
int si,sj,di,dj;
int flag;
int step[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

void dfs(int i,int j,int sec)
{
if(i==di && j==dj && sec==t)
{
flag=1;
return ;
}
if(abs(di-i)+abs(dj-j)>t-sec || (t-sec-abs(di-i)-abs(dj-j))%2!=0)
{
flag=0;
return ;
}
for(int k=0;k<4;k++)
{
if(i+step[k][0]<0 || i+step[k][0]>=n || j+step[k][1]<0 || j+step[k][1]>=m)
continue;
if(c[i+step[k][0]][j+step[k][1]]!='X')
{
c[i+step[k][0]][j+step[k][1]]='X';
dfs(i+step[k][0],j+step[k][1],sec+1);
c[i+step[k][0]][j+step[k][1]]='.';
}
if(flag)
return ;
}
}

int main(int argc, char *argv[])
{
while(cin>>n>>m>>t)
{
if(n==0 && m==0 && t==0)
break;
wall=0;
flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>c[i][j];
if(c[i][j]=='S')
{
si=i;
sj=j;
c[i][j]='X';
}
else if(c[i][j]=='D')
{
di=i;
dj=j;
c[i][j]='.';
}
else if(c[i][j]=='X')
{
wall++;
}
}
}
if(n*m-wall>=t)
{
dfs(si,sj,0);
}
if(flag)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
华芯测试
2024-09-01 广告
电学测试台是深圳市华芯测试科技有限公司的核心设备之一,它集成了高精度测量仪器与自动化控制系统,专为半导体芯片、电子元件及模块的电性能检测而设计。该测试台能够迅速、准确地完成电压、电流、电阻、电容及频率等关键参数的测试,确保产品质量符合行业标... 点击进入详情页
本回答由华芯测试提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式