–*–
-–
-–
-–
0 1 1
0 4 3
1 1 3
1 4 2
2 0 3
3 0 4
3 3 2
4 1 3
样例输出
1
-1
1
-1
1
1
-1
-1
数据规模和约定
1≤n≤500,0≤x≤n-1,0≤y≤n-1,1≤s≤500
解答;我使用了dfs但是很不幸超时了;
#include
using namespace std;
typedef long long ll;
char dp[501][501];
int visited[501][501];
ll n;
int dfs(int x,int y,int sum){
if(x==0 && y==0 &&sum>=0){
return 1;
}
if(sum==0)
return 0;
if(!visited[x][y] && x>=0 && x<n && y>=0&&y<n && sum>0){
visited[x][y]=1;
if(dp[x-1][y]=='-'){
if(dfs(x-1,y,--sum))
return 1;
visited[x][y]=0;
++sum;
}
if(dp[x+1][y]=='-'){
if(dfs(x+1,y,--sum))
return 1;
visited[x][y]=0;
++sum;}
if(dp[x][y+1]=='-'){
if(dfs(x,y+1,--sum))
return 1;
visited[x][y]=0;
++sum;}
if(dp[x][y-1]=='-'){
if(dfs(x,y-1,--sum))
return 1;
visited[x][y]=0;
++sum;}
}
visited[x][y]=0;
return 0;
}
int main(){
cin >> n;
for(int i = 0;i<n;i++)
for(int j =0;j<n;j++)
cin >> dp[i][j];
int x,y,sum;
while( cin >> x >> y >> sum){
for(int i = 0;i<n;i++)
for(int j = 0;j<n;j++)
visited[i][j]=0;
if(dfs(x,y,sum))
cout<<"1";
else
cout<<"-1";
cout<<endl;
}
}
逻辑比较清晰了我就不解释啦