| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 332 人关注过本帖
标题:hdu1010Tempter of the Bone问题
只看楼主 加入收藏
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
结帖率:100%
收藏
 问题点数:0 回复次数:3 
hdu1010Tempter of the Bone问题
测试数据都通过了,可是还是WA,调试了N久,,求大神帮助啊。。
程序代码:
#include<iostream>
#include<cmath>

using namespace std;
char mp[9][9];
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
int di,dj,t,escap, n, m;
void DFS(int si,int sj,int cnt)
{
    int tmp;
    if(si>n || sj > m || si<=0 || sj<= 0)return ;
    if(si==di && sj==dj && t==cnt){    escap=1;}
    if(escap==1)return;
    tmp=t-cnt-abs(si-di)-abs(sj-dj);
    if(tmp<0 || tmp&1 )return ;        //奇偶校检
    
    for(int i =0 ; i< 4 ;i++)
    {
        if(mp[si+dir[i][0]][sj+dir[i][1]] != 'X' )
        {
            mp[si+dir[i][0]][sj+dir[i][1]] = 'X';
            DFS(si+dir[i][0],sj+dir[i][1],cnt+1);
            mp[si+dir[i][0]][sj+dir[i][1]]='.';
        }
    }
    return;
}

int main()
{ 
    int wall,si,sj;
    while(cin>>n>>m>>t)
    {
        if(n==0&&m==0&&t==0)break;
        wall=0;
        for(int i = 1 ;i <=n ;i++)
            for(int j=1 ; j<= m ;j++)
            {
                cin>>mp[i][j];
                if(mp[i][j]=='X')wall++;
                else if(mp[i][j]=='D'){    di = i ; dj = j ;    }
                else if(mp[i][j]=='S'){    si = i ; sj = j ;    }
            }
        if(n*m-wall<=t)
        {
            cout<<"NO"<<endl;
            continue;
        }
        escap = 0;
        mp[si][sj]='X';
        DFS(si,sj,0);
        if(escap == 1 )cout<<"YSE"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}
2012-05-18 23:20
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
都没人回答呢。。。
2012-05-19 09:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
if(mp[si+dir[i][0]][sj+dir[i][1]] != 'X' )
这句会将出口覆盖。'D'必须在最后一步进入。
这段AC,可以参考。
程序代码:
#include<stdio.h>
char map[8][8];
int N, M, T;
int test(int r, int c, int t)
{
    if(map[r][c] == 'D' && t == T) return 1;
    if(map[r][c] == 'D' || t == T) return 0;
    t++;
    map[r][c] = 'X';
    if(r > 0 && map[r - 1][c] != 'X' && test(r - 1, c, t)) return 1;
    if(c > 0 && map[r][c - 1] != 'X' && test(r, c - 1, t)) return 1;
    if(r < N - 1 && map[r + 1][c] != 'X' && test(r + 1, c, t)) return 1;
    if(c < M - 1 && map[r][c + 1] != 'X' && test(r, c + 1, t)) return 1;
    map[r][c] = '.';
    return 0;
}
int main()
{
    int i, j;
    while(scanf("%d%d%d\n", &N, &M, &T), N)
    {
        for(i = 0; i < N; gets(map[i++]));
        for(i = 0; i < N; i++)
        {
            for(j = 0; j < M && map[i][j] != 'S'; j++);
            if(j < M) break;
        }
        puts(test(i, j, 0) ? "YES" : "NO");
    }
    return 0;
}



重剑无锋,大巧不工
2012-05-19 13:56
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
回复 3楼 beyondyf
我那个程序基本是AC的。。。最后一个输出检查了半天才发现,YES错打成YSE。。。
2012-05-22 20:34
快速回复:hdu1010Tempter of the Bone问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016680 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved