📄 1019.cpp
字号:
#include<iostream>
#include <cstdio>
using namespace std;
char position[1000];
int start[1000] , end[1000] , n , m ;
int dfs(int step,int x,int y,int a[105][105],int nn)
{
int game , flag=0 , i,j,sign;
if( nn == step) return 1;
for( i = start[nn] ; i <= end[nn] ; i ++ )
{
sign = 0;
switch( position[nn] )
{
case 'U':
{
if( a[x-i][y] == 1 || x-i < 1)
{ game = 0;flag = 1 ;}
else
{
for( j = x-i ; j < x ; j++)
if(a[j][y] == 1)
{
game=0 ;
flag=1;
sign = 1;
break;
}
if( sign == 0)game = dfs( step,x-i,y,a,nn+1);
}
}
break;
case 'D':
{
if(a[x+i][y]==1||x+i>n)
{ game=0 ; flag=1;}
else
{
for( j = x+1 ; j < x+i ; j++)
if(a[j][y] == 1)
{
game=0 ;
flag=1;
sign = 1;
break;
}
if(sign == 0) game=dfs(step,x+i,y,a,nn+1);
}
}
break;
case 'L':
{
if(a[x][y-i] == 1 || y-i<1)
{game=0;flag=1;}
else
{
for( j = y-i ; j < y ; j++)
if(a[x][j] == 1)
{
game=0 ;
flag=1;
sign = 1;
break;
}
if(sign == 0 ) game = dfs(step,x,y-i,a,nn+1);
}
}
break;
case 'R':
{
if(a[x][y+i]==1||y+i>m){game=0;flag=1;}
else
{
for( j = y ; j < y+i ; j++)
if(a[x][j] == 1)
{
game=0 ;
flag=1;
sign = 1;
break;
}
if(sign == 0) game=dfs(step,x,y+i,a,nn+1);
}
}
break;
}
if(game==1||flag==1)
break;
}
return game;
}
int main()
{
// FILE *fp;
// fp = fopen("11.txt","r");
int num;
// fscanf(fp,"%d",&num);
scanf("%d",&num);
while(num--)
{
int i,j;
int a[105][105]={0};
int number=0,step;
// fscanf(fp,"%d%d",&n,&m);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
// fscanf(fp,"%d",&a[i][j]);
scanf("%d",&a[i][j]);
i=0;
while(1)
{
//fscanf(fp,"%d %d",&start[i],&end[i]);
scanf("%d%d",&start[i],&end[i]);
getchar();
if( start[i]== 0 && end[i] == 0 )
break;
//fscanf(fp," %c",&position[i]);
scanf("%c",&position[i]);
i++;
}
step=i;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j] != 1)
if(dfs(step,i,j,a,0)==1)
number++;
printf("%d\n",number);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -