搜索
查看: 1117|回复: 0
打印 上一主题 下一主题

[题目/题解] 取暖管道 (trase)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-20 20:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[code=Cpp width=740px]
#include <stdio.h>
int a[12][12],all=0;
int n,m;
void dfs(int x,int y,int fx)
{
    int i,j;
    if(x==n && y==m+1)//注意这个地需要搜索到a[n][m+1]的地方,而不能搜索到a[n][m]
        {
            all++;
            return;
        }
    if(x>n || y>m)//越界剪纸
        return;
    if(a[x][y]==5)//树的情况
        return;

    if(fx==1)//入口方向在上面
    {
        if(a[x][y]==0)//没有限制
        {
            dfs(x,y+1,2);
            dfs(x+1,y,1);
        }
        if(a[x][y]==1)//只能使用1号管子
            dfs(x,y+1,2);//这里注意,如果使用1号管子,那么下一个格子的入口将是2
        if(a[x][y]==4)//只能使用4号管子
            dfs(x+1,y,1);
    }
    if(fx==2)////入口方向在左边
    {
        if(a[x][y]==0)
        {
            dfs(x,y+1,2);
            dfs(x+1,y,1);
        }
        if(a[x][y]==2)
            dfs(x+1,y,1);
        if(a[x][y]==3)
            dfs(x,y+1,2);
            
    }
    return;
}

int main()
{
    freopen("trase.in","r",stdin);
    freopen("trase.out","w",stdout);
    int i,j;
   
    scanf("%d %d",&m,&n);
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
      {
            scanf("%d",&a[j]);
      }
    dfs(1,1,1);//三个参数分别表示,当前格子的x坐标,y坐标,和这个格子的入口方向
    printf("%d",all);
    return 0;
}
</stdio.h>[/code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表