1 条题解

  • 0
    @ 2024-12-24 10:06:06

    C :

    #include <stdio.h>      //Dfs深度优先搜索     注意搜索深度t
    #include <string.h>
    char D[20][20];
    int t,n,m;
    int road(int i,int o,int timet)
    {
        int time[4]={0},j;
        if (D[i][o]=='E')
            return 1;
        if (timet==0)
            return 100;
        D[i][o]='#';
        if (o<m-1&&D[i][o+1]!='#')
            time[0]=road(i,o+1,timet-1)+1;
        else
            time[0]=100;
        if (o>0&&D[i][o-1]!='#')
            time[1]=road(i,o-1,timet-1)+1;
        else
            time[1]=100;
        if (i>0&&D[i-1][o]!='#')
            time[2]=road(i-1,o,timet-1)+1;
        else
            time[2]=100;
        if (i<n-1&&D[i+1][o]!='#')
            time[3]=road(i+1,o,timet-1)+1;
        else
            time[3]=100;
        D[i][o]='.';
        for (j=1;j<4;j++)
            if (time[0]>time[j])
                time[0]=time[j];
        return time[0];
    }
         
    int main()
    {
        int i,o,k,l,time;
     
        while (scanf("%d%d%d",&n,&m,&t)!=EOF&&n&&m)
        {
            getchar();
            for (i=0;i<n;i++)
            {
                gets(D[i]);
                for (o=0;o<m;o++)
                {
                    if (D[i][o]=='S')
                    {
                        k=i;
                        l=o;
                    }
                }
            }
            time=road(k,l,t-1);
            if (time<=1||time>t)
                printf("Tragedy!!!\n");
            else
                printf("Oh Yes!!!\n");
        }
        return 0;
    }
    

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    
    struct MAZE {
    	int x, y, time;
    } s, e, head, tail;
    
    char g[10][10];
    int v[10][10], f[][2] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }, n, m, t;
    
    int bfs() {
    	memset(v, 0, sizeof(v));
    	queue<struct MAZE> q;
    	s.time = 1;
    	v[s.x][s.y] = 1;
    	q.push(s);
    	while (!q.empty()) {
    		head = q.front();
    		q.pop();
    		for (int i = 0; i < 4; i++) {
    			tail.x = head.x + f[i][0];
    			tail.y = head.y + f[i][1];
    			tail.time = head.time + 1;
    			if (!v[tail.x][tail.y] && g[tail.x][tail.y] != '#' && tail.x >= 0
    					&& tail.x < n && tail.y >= 0 && tail.y < m) {
    				if (tail.x == e.x && tail.y == e.y && tail.time <= t)
    					return 1;
    				v[tail.x][tail.y] = 1;
    				q.push(tail);
    			}
    		}
    	}
    	return 0;
    }
    
    int main() {
    	int i, j;
    	while (cin >> n >> m >> t, n && m) {
    		for (i = 0; i < n; i++)
    			for (j = 0; j < m; j++) {
    				cin >> g[i][j];
    				if (g[i][j] == 'S') {
    					s.x = i;
    					s.y = j;
    				} else if (g[i][j] == 'E') {
    					e.x = i;
    					e.y = j;
    				}
    			}
    		puts(bfs() ? "Oh Yes!!!" : "Tragedy!!!");
    	}
    	return 0;
    }
    
    • 1

    信息

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