求助大佬,样例能过,全WA
查看原帖
求助大佬,样例能过,全WA
525721
wangsongsong楼主2021/8/17 13:31
#include <stdio.h>
#include <string.h>
#include <math.h>
#define EPS 1000
int main(void)
{
    char map[12][12]={{'0'}}; //一张地图
    int i,j;
    for( i = 0; i < 12; i++) {map[i][0] = '*';map[i][11] = '*';}
    for( j = 1; j < 12; j++) {map[0][j] = '*';map[11][j] = '*';}//边框上铺障碍物
    struct posion
    {
        int x,y;
    };
    struct posion F,C;//坐标结构体
    for( i = 1; i <= 10; i++) {
        for( j = 1; j <= 10; j++) {
            scanf("%c",&map[i][j]);
            if(map[i][j] == 'F'){ F.x = i;F.y = j;}
            if(map[i][j] == 'C'){C.x = i;C.y = j;}//输入坐标
        }
        getchar();//吞回车,不用的话输入就有问题。。
    }

    //printf("F(%d,%d)\tC(%d,%d)\n",F.x,F.y,C.x,C.y);

    int ans=0;//记录分钟数
    int head_F = 0, head_C = 0; //初始方向,北-0,东-1,南-2,西-3
    
    while( ans<=EPS ) { //用一个大数判断是否无法相遇
        ans++;           //循环开始,分钟数+1
        
        
        if(head_F == 0) {
            if( map[F.x-1][F.y] != '*' ) F.x--;
            else head_F = (head_F + 1) % 4;
        }
        else if(head_F == 1) {
            if( map[F.x][F.y+1] != '*' ) F.y++;
            else head_F = (head_F + 1) % 4;
        }
        else if(head_F == 2) {
            if( map[F.x+1][F.y] != '*' ) F.x++;
            else head_F = (head_F + 1) % 4;
        }
        else if(head_F == 3) {
            if( map[F.x][F.y-1] != '*' ) F.y--;
            else head_F = (head_F + 1) % 4;
        }

        if(head_C == 0) {
            if( map[C.x-1][C.y] != '*' ) C.x--;
            else head_C = (head_C + 1) % 4;
        }
        else if(head_C == 1) {
            if( map[C.x][C.y+1] != '*' ) C.y++;
            else head_C = (head_C + 1) % 4;
        }
        else if(head_C == 2) {
            if( map[C.x+1][C.y] != '*' ) C.x++;
            else head_C = (head_C + 1) % 4;
        }
        else if(head_C == 3) {
            if( map[C.x][C.y-1] != '*' ) C.y--;
            else head_C = (head_C + 1) % 4;
        }

        //printf("F(%d,%d)\t方向:%d \t C(%d,%d)\t方向:%d\n",F.x,F.y,head_F,C.x,C.y,head_C);


        //上述移动过后(一分钟结束时),如果相遇,跳出循环
        if(F.x == C.x && F.y == C.y) break;

    }

    if(F.x!=C.x || F.y!=C.y) putchar('0');
    else printf("%d",ans);

    return 0;
}
2021/8/17 13:31
加载中...