Cod sursa(job #3247505)

Utilizator Alexandru_cioAlexandru Ciobanica Alexandru_cio Data 8 octombrie 2024 09:15:01
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cartite.in");
ofstream g("cartite.out");

struct vulpe{
    int x, y, r;
};

struct gcoord{
    int x1, y1, x2, y2;
};

int l[201][201], p, k, n, m, G, xc, yc, di[] = {1, 0, 0, -1}, dj[] = {0, 1, -1, 0}, a[201][201], e, lant[201], l1;
pair<int, int> start;
vulpe vl[51];
gcoord gal[101];

void ump(int x, int y, int t)
{
    if(t == -1)
        return;
    l[x][y] = 1;
    for(int i = 0; i < 4; i++)
        ump(x + di[i], y + dj[i], t - 1);
}

void lee()
{
    if(l[xc][yc] == -1)
    {
        if(p == 1)
            g << xc << ' ' << yc << ' ' << 0;
        else
            start = {xc, yc};
        return;
    }
    queue<pair<int, int>> q;
    l[xc][yc] = 1;
    q.push({xc, yc});
    while (!q.empty())
    {
        int x = q.front().first, y = q.front().second;
        q.pop();
        for(int k = 0; k < 4; k++)
        {
            int xv = di[k] + x, yv = dj[k] + y;
            if(xv > 0 && xv <= n && yv > 0 && yv <= m)
            {
                if(l[xv][yv] == -1)
                {
                    if(p == 1)
                        g << xv << ' ' << yv << ' ' << l[x][y];
                    else
                        start = {xv, yv};
                    return;
                }
                else if(!l[xv][yv])
                {
                    l[xv][yv] = l[x][y] + 1;
                    q.push({xv, yv});
                }
            }
        }
    }
}

int main()
{
    f >> p >> n >> m >> xc >> yc >> k;
    for(int i = 0; i < k; i++)
        f >> vl[i].x >> vl[i].y >> vl[i].r;
    for(int i = 0; i < k; i++)
        ump(vl[i].x, vl[i].y, vl[i].r);
    f >> G;
    for(int i = 0; i < G; i++)
    {
        int x1, y1, x2, y2;
        f >> x1 >> y1 >> x2 >> y2;
        gal[i] = {x1, y1, x2, y2};
        if(!l[x1][y1])
            l[x1][y1] = -1;
        if(!l[x2][y2])
            l[x2][y2] = -1;
    }
    if(p==1)
        lee();
    return 0;
}