1 条题解

  • 0
    @ 2025-2-14 21:09:17

    C :

    #include <stdlib.h>
    #include <stdio.h>
     
    char a[9][9];
    int n,m,t,dx,dy,f;
    int g[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
    void dfs(int x,int y,int p)
    {
        int i,sx,sy,s;
        s=p-abs(x-dx)-abs(y-dy);
        if(x>n||y>m||x<=0||y<=0) return;
        if(p==0&&s==0) f=1;
        if(f) return;
        if(s<0||s&1) return;
        for(i=0; i<4; i++)
        {
            sx=x+g[i][0];
            sy=y+g[i][1];
            if(a[sx][sy]!='X')
            {
                a[sx][sy]='X';
                dfs(sx,sy,p-1);
                a[sx][sy]='.';
            }
        }
        return;
    }
    int main()
    {
        int i,j,x,y,b;
        while(scanf("%d%d%d",&n,&m,&t)&&(n!=0||m!=0||t!=0))
        {
            getchar();
            b=0;
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=m; j++)
                {
                    scanf("%c",&a[i][j]);
                    if(a[i][j]=='S')
                    {
                        x=i;
                        y=j;
                    }
                    else if(a[i][j]=='D')
                    {
                        dx=i;
                        dy=j;
                    }
                    else if(a[i][j]=='X') b++;
                }
                getchar();
            }
     
            if(n*m-b<=t)
            {
                printf("NO\n");
                continue;
            }
            f=0;
            a[x][y]='X';
            dfs(x,y,t);
            if(f) printf("YES\n");
            else printf("NO\n");
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1056
        User: admin
        Language: C
        Result: 正确
        Time:2 ms
        Memory:1064 kb
    ****************************************************************/
    

    C++ :

    #include <stdio.h>
    int n,m,t,ok;
    char a[11][11]; 
    void dd(int t,int x,int y)
    {
    	if((t==0)&&(a[x][y]=='D'))
    		ok=1;
    	if(t==0)
    		return;
    	if(ok==1)
    		return;
    	if((a[x-1][y]=='.')||((a[x-1][y]=='D')&&(t==1)))
    	{
    		a[x][y]='X';
    		dd(t-1,x-1,y);
    		a[x][y]='.';
    	}
    	if((a[x+1][y]=='.')||((a[x+1][y]=='D')&&(t==1)))
    	{
    		a[x][y]='X';
    		dd(t-1,x+1,y);
    		a[x][y]='.';
    	}
    	if((a[x][y-1]=='.')||((a[x][y-1]=='D')&&(t==1)))
    	{
    		a[x][y]='X';
    		dd(t-1,x,y-1);
    		a[x][y]='.';
    	}
    	if((a[x][y+1]=='.')||((a[x][y+1]=='D')&&(t==1)))
    	{
    		a[x][y]='X';
    		dd(t-1,x,y+1);
    		a[x][y]='.';
    	}
    }
    int run()
    {
    	int i,j,x,y;
    	char s[10];
    	for(i=0;i<=n+1;i++)
    		for(j=0;j<=m+1;j++)
    			a[i][j]='X';
    	for(i=1;i<=n;i++)
    	{
    		scanf("%s",s);
    		for(j=1;j<=m;j++)
    		{
    			a[i][j]=s[j-1];
    			if(a[i][j]=='S')
    			{
    				x=i;
    				y=j;
    			}
    		}
    	}
    	ok=0;
    	dd(t,x,y);
    	if(ok==1)
    		printf("YES\n");
    	else
    		printf("NO\n");
    }
    int main()
    {
    	scanf("%d%d%d",&n,&m,&t);
    	while(n!=0)
    	{
    		run();
    		scanf("%d%d%d",&n,&m,&t);
    	}
    	return 0;
    }
    

    Python :

    def space_input(p=''):
        s=raw_input(p).split()
        for i in range(len(s)):
            s[i]=eval(s[i])
        return tuple(s)
    class Mymap:
        def __init__(self,h,w):
            self.sx=self.sy=0
            self.height=h
            self.width=w
            self.allmoves=set()
            self.maze=[[' ' for i in range(w)] for i in range(h)]
        def getmap(self):
            for i in range(self.height):
                line=raw_input()
                for j in range(self.width):
                    self.maze[i][j]=line[j]
                    if line[j]=='S':
                        self.sx,self.sy=i,j
        def move(self,maze,sx,sy,moves=0):
            if maze[sx][sy]=='D':
                self.allmoves.add(moves)
            else:
                new=eval(repr(maze))
                new[sx][sy]='X'
                for i,j in [(sx-1,sy),(sx+1,sy),(sx,sy-1),(sx,sy+1)]:
                    if 0<=i<self.height and 0<=j<self.width and new[i][j]!='X':
                        self.move(new,i,j,moves+1)
    h,w,t=space_input()
    while h or w or t:
        a=Mymap(h,w)
        a.getmap()
        a.move(a.maze,a.sx,a.sy)
        if t in a.allmoves:
            print 'YES'
        else:
            print 'NO'
        h,w,t=space_input()
    
    • 1

    信息

    ID
    647
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者