<strong><span style="font-size:18px;color:#ff0000;"><textarea readonly="readonly" name="code" class="c++">
</span></strong>
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
const int maxn=11;
int ans=1,flag;
int dir[4][2]={-1,0,0,1,1,0,0,-1}; //上,右,下,左
int w,h; //0, 1, 2, 3
char room[maxn][maxn];
bool used[maxn][maxn][4],mark[maxn][maxn];
int mar=0,ii,jj;
int test=1;
void dfs(int direc,int x,int y){
if(flag){
return;
}
if(used[x][y][direc]){
flag=1;
return;
}
used[x][y][direc]=true;
if(!mark[x][y]){
ans++;
}
mark[x][y]=true;
for(int i=0;i<4;i++){
int xxxx=x+dir[(direc+i)%4][0],yyyy=y+dir[(direc+i)%4][1];
if(xxxx>=0&&xxxx<w&&yyyy>=0&&yyyy<h&&room[ xxxx ][ yyyy ]=='.'){
//cout<<test++<<" "<<(direc+i)%4<<" "<<xxxx<<" "<<yyyy<<endl;
dfs( (direc+i)%4,xxxx,yyyy );
}
}
}
int main(){
//freopen("D:\\in.txt","r",stdin);
cin>>w>>h;
for(int i=0;i<w;i++){
cin>>room[i];
}
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
if(room[i][j]!='.'&&room[i][j]!='*'){
if(room[i][j]=='U'){
mar=0;
}
else if(room[i][j]=='R'){
mar=1;
}
else if(room[i][j]=='D'){
mar=2;
}
else{
mar=3;
}
ii=i,jj=j;
break;
}
}
}
used[ii][jj][mar]=true;
mark[ii][jj]=true;
room[ii][jj]='.'; //没有这句第十五组测试数据跪了
for(int i=0;i<4;i++){
int xxx=ii+dir[(mar+i)%4][0],yyy=jj+dir[(mar+i)%4][1];
if(xxx>=0&&xxx<w&&yyy>=0&&yyy<h&&room[ xxx ][ yyy ]=='.'){
//cout<<test++<<" "<<(mar+i)%4<<" "<<xxx<<" "<<yyy<<endl;
dfs( (mar+i)%4,xxx,yyy );
}
}
cout<<ans<<endl;
return 0;
}
<strong><span style="font-size:18px;color:#ff0000;"></textarea>
</span></strong>
dfs搜索练习题 http://codeforces.com/problemset/problem/589/J
最新推荐文章于 2022-01-04 19:42:33 发布