#include<stdio.h>
#define MAX 101
#define maxTrip 10000
struct step
{
int x,y;
char direct;
}chase[maxTrip];
int field[MAX][MAX];
int row[MAX][MAX],column[MAX][MAX];
int m,n;
int ans;
int trip;
int found;
int max(int x,int y)
{
return (x>y)?x:y;
}
int min(int x,int y)
{
return (x<y)?x:y;
}
void initialize()
{
int i,j;
scanf("%d,%d",&m,&n);
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
scanf("%d",&field[i][j]);
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
row[i][j]=row[i][j-1]+field[i][j];
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
column[j][i]=column[j-1][i]+field[j][i];
trip=0;
int from,to;
while(scanf("%d,%d,&from,&to") && (from || to))
{
chase[trip].x=from;
chase[trip].y=to;
scanf(" %c",&chase[trip].direct);
++trip;
}
}
void search(int step,int x,int y)
{
int i;
if (found) return;
if (step==trip){
++ans;
found=1;
return;
}
for(i=chase[step].x;i<=chase[step].y;++i){
int x0=x,y0=y;
switch (chase[step].direct){
case 'R':y0+=i;break;
case 'L':y0-=i;break;
case 'U':x0-=i;break;
case 'D':x0+=i;break;
}
if(x0>=1 && x0<=m && y0>=1 && y0<=n)
switch(chase[step].direct){
case'R':
case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);
break;
case 'U':
case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
search(step+1,x0,y0);
break;
}
}
int main(void){
int i,j;
for (i=1;i<=m;++i)
row[i][0]=0;
for(i=1;i<=n;++i)
column[0][i]=0;
int iCase;
scanf("%d",&iCase);
while (iCase--){
initialize();
ans=0;
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
if (!field[i][j])
{
found=0;
search(0,i,j);
}
printf("%d\n",ans);
}
return 0;
}
测试这个c++程序最后的main函数的大括号有问题,帮忙看下啊。
答案:3 mip版
解决时间 2021-01-08 12:38
- 提问者网友:安分守己的小青春
- 2021-01-08 04:10
最佳答案
- 二级知识专家网友:单剑走天涯
- 2021-01-08 05:32
swich缺少个结尾 },程序最后结尾多了一个} 望采纳,谢谢
switch(chase[step].direct){
case'R':
case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);
break;
case 'U':
case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
search(step+1,x0,y0);
break;
switch(chase[step].direct){
case'R':
case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);
break;
case 'U':
case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
search(step+1,x0,y0);
break;
全部回答
- 1楼网友:神經兮兮
- 2021-01-08 07:32
main函数前面少个},是上一个函数search少的
再看看别人怎么说的。
- 2楼网友:对你在意
- 2021-01-08 06:35
void search(int step,int x,int y) //最后掉了一个 }
#include<stdio.h>
#define MAX 101
#define maxTrip 10000
struct step
{
int x,y;
char direct;
}chase[maxTrip];
int field[MAX][MAX];
int row[MAX][MAX],column[MAX][MAX];
int m,n;
int ans;
int trip;
int found;
int max(int x,int y)
{
return (x>y)?x:y;
}
int min(int x,int y)
{
return (x<y)?x:y;
}
void initialize()
{
int i,j;
scanf("%d,%d",&m,&n);
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
scanf("%d",&field[i][j]);
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
row[i][j]=row[i][j-1]+field[i][j];
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
column[j][i]=column[j-1][i]+field[j][i];
trip=0;
int from,to;
while(scanf("%d,%d,&from,&to") && (from || to))
{
chase[trip].x=from;
chase[trip].y=to;
scanf(" %c",&chase[trip].direct);
++trip;
}
}
void search(int step,int x,int y)
{
int i;
if (found) return;
if (step==trip){
++ans;
found=1;
return;
}
for(i=chase[step].x;i<=chase[step].y;++i){
int x0=x,y0=y;
switch (chase[step].direct){
case 'R':y0+=i;break;
case 'L':y0-=i;break;
case 'U':x0-=i;break;
case 'D':x0+=i;break;
}
if(x0>=1 && x0<=m && y0>=1 && y0<=n)
switch(chase[step].direct){
case'R':
case'L':
if (row[x0][max(y,y0)]==row[x0][min(y,y0)-1])
search(step+1,x0,y0);
break;
case 'U':
case 'D':
if (column[max(x,x0)][y0]==column[min(x,x0)-1][y0])
search(step+1,x0,y0);
break;
}
}
}
int main(void){
int i,j;
for (i=1;i<=m;++i)
row[i][0]=0;
for(i=1;i<=n;++i)
column[0][i]=0;
int iCase;
scanf("%d",&iCase);
while (iCase--){
initialize();
ans=0;
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
if (!field[i][j])
{
found=0;
search(0,i,j);
}
printf("%d\n",ans);
}
return 0;
}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯