Cod sursa(job #865345)

Utilizator costi_.-.Costinnel costi_.-. Data 26 ianuarie 2013 13:02:38
Problema Santa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#define nmax 8
using namespace std;

ifstream f("santa.in");
ofstream g("santa.out");
int ST[nmax],CH[nmax],A[nmax][nmax];
int N,M,S,E,Q,STOP;


int valid(int k)
{
    if((!CH[ST[k]])&&(A[ST[k]][ST[k-1]]))
    return 1;
    else
    return 0;
}

void afisare()
{
    int i;
    g<<N<<'\n';
    for(i=1;i<=N;i++)
    g<<ST[i]<<' ';
    g<<'\n';
    g.close();
}

void backtrack(int k)
{
    if(!STOP)
    {
        int i;
        for(i=1;i<=N;i++)
        {
            if(!STOP)
            {
                ST[k]=i;
                if(valid(k))
                {
                    CH[ST[k]]=1;
                    if(k==N)
                    {
                        afisare();
                        STOP=1;
                    }
                    else
                    backtrack(k+1);
                    CH[ST[k]]=0;
                }
            }
            else
            return;
        }
    }
    else
    return;
}
int main()
{
    int x,y;
    f>>N>>M;
    if(N>7)
    g<<"No chance\n";
    else
    {
        for(int i=1;i<=M;i++)
        {
            f>>x>>y;
            A[x][y]=A[y][x]=1;
        }
        f>>S>>E>>Q;
        f.close();

        ST[1]=Q;
        CH[ST[1]]=1;
        backtrack(2);
        if(!STOP)
        g<<"No chance\n";
        g.close();
    }

    return 0;
}