HDU ACM 1010 Tempter of the Bone

分析:搜索题,,注意剪枝。

#include<iostream>using namespace std;int dfs(int si,int sj,int ei,int ej,int mt);char map[8][8];int m,n,fa;int main(){int t,i,j,wall,sti,stj,eni,enj;while(cin>>n>>m>>t &&(n||m||t)){wall=0;fa=0;for(i=1;i<=n;i++){getchar();for(j=1;j<=m;++j){cin>>map[i][j];if(map[i][j]=='X'){wall++;}else if(map[i][j]=='S'){sti=i;stj=j;}else if(map[i][j]=='D'){eni=i;enj=j;}}}if(wall>=n*m-t){cout<<"NO"<<endl;continue;}map[sti][stj]='X';dfs(sti,stj,eni,enj,t);if(fa){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;}int dfs(int si,int sj,int ei,int ej,int mt){int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};int temp,i;if(mt<0) return 0;if(si<1||sj<1||si>n||sj>m) return 0;temp=mt-(ei-si)-(ej-sj);if(temp<0 || temp&1) return 0;if(map[si][sj]==map[ei][ej] && mt==0) {fa=1;return 1;}for(i=0;i<4;i++){if(map[si+dir[i][0]][sj+dir[i][1]]!='X'){map[si+dir[i][0]][sj+dir[i][1]]='X';if(!dfs(si+dir[i][0],sj+dir[i][1],ei,ej,mt-1)){map[si+dir[i][0]][sj+dir[i][1]]='.';}else{return 1;}}}return 0;}

无神的瞳孔,我迫切想逃离这周遭被钢筋混凝土堆架的城市,

HDU ACM 1010 Tempter of the Bone

相关文章:

你感兴趣的文章:

标签云: