Esempio n. 1
0
//This actually prints stack in reverse
void printSt(node * top) {
    if(top==NULL) {
        return;
    }
    printSt(top->next);
    printf("(%d, %d) ", top->x, top->y);
}
Esempio n. 2
0
void printSt(toSQLParse::statement &stat, int level)
{
    for (int i = 0; i < level; i++)
        printf("    ");

    switch (stat.StatementClass)
    {
    case toSQLParse::statement::unknown:
        printf("[U]");
        break;
    case toSQLParse::statement::ddldml:
        printf("[D]");
        break;
    case toSQLParse::statement::plsqlblock:
        printf("[P]");
    default:
        printf("[B]");
    }

    switch (stat.Type)
    {
    case toSQLParse::statement::Block:
        printf("Block:");
        break;
    case toSQLParse::statement::Statement:
        printf("Statement:");
        break;
    case toSQLParse::statement::List:
        printf("List:");
        break;
    case toSQLParse::statement::Keyword:
        printf("Keyword:");
        break;
    case toSQLParse::statement::Token:
        printf("Token:");
        break;
    case toSQLParse::statement::EndOfStatement:
        printf("EndOfStatement:");
        break;
    case toSQLParse::statement::Raw:
        printf("Raw:");
        break;
    }
    printf("%s (%d)\n", (const char *)stat.String.toUtf8(), stat.Line);
    if (!stat.Comment.isNull())
    {
        for (int i = 0; i < level; i++)
            printf("    ");
        printf("Comment:%s\n", (const char *)stat.Comment.toUtf8());
    }
    for (std::list<toSQLParse::statement>::iterator i = stat.subTokens().begin();
            i != stat.subTokens().end();
            i++)
        printSt(*i, level + 1);
}
Esempio n. 3
0
//Function to solve maze
node * solve(maze m, int debugMode) {

    node* stack = NULL;
    int stop=false; // to stop while loop
    int i,j;
    char ** reset; //resets maze to get rid of all of the X's

    //reset is memory allocated similarily to maze
    reset = (char**) malloc(sizeof(char*) * (m.xsize + 2));
    for(i=0; i<(m.ysize+2); i++) {
        reset[i] = (char*)malloc(sizeof(char)*(m.ysize+2));
    }
    for(i=0; i < m.xsize+2; i++) {
        for(j=0; j<m.ysize+2; j++) {
            reset[i][j]= m.array[i][j];
        }
    }
    //push start value on to stzck
    push(&stack, m.xstart, m.ystart);

    while(stack != NULL && stop == false) {
        if(debugMode==true) {
            printf("Current Stack: ");
            printSt( stack ); //debug mode true  so print stack as it changes
            printf("\n");
        }
        int x= -1; //x and y set to -1 so they're not initially on maze
        int y= -1;
        setTop(stack, &x, &y);
        if(m.xend == x && m.yend == y) { //found end position and solved maze
            stop = true;
            break;
        }
        int left = x - 1;
        int right = x + 1;
        int down = y - 1;
        int up = y+1;

        if(m.array[right][y] == '.' || m.array[right][y] == 'e') {
            push(&stack,right, y);
            m.array[right][y] = 'x';
        }
        else if(m.array[x][down] == '.' || m.array[x][down] == 'e') {
            push(&stack, x,down);
            m.array[x][down] = 'x';
        }
        else if(m.array[x][up] == '.' || m.array[x][up] == 'e') {
            push(&stack, x, up);
            m.array[x][up] = 'x';
        }
        else if(m.array[left][y] == '.' || m.array[left][y] == 'e') {
            push(&stack, left, y);
            m.array[left][y] = 'x';
        }
        else {
            pop(&stack); //no viable moves
        }
    }
//reset maze to it's original position
    for(i=0; i < m.xsize+2; i++) {
        for(j=0; j<m.ysize+2; j++) {
            m.array[i][j]=reset[i][j];
        }
    }
    //free reset array
    for(i=0; i < m.xsize+2; i++) {
        free(reset[i]);
    }
    return stack;
}
Esempio n. 4
0
int main(int argc, char** argv)
{
    maze m1;
    node * stack=NULL; // stack pointer
    node * temp; //temporary node
    int px, py; // previous x and y positions
    int x, y;  //x and y positions
    int i,j;
    int debugMode = false;
    char *file;

    /* verify the proper number of command line arguments were given */
    if( argc > 3 ) {
        printf("Usage: %s [-d] <maze data file>\n", argv[0]);
        exit(-1);
    }

    if( 2 == argc ) {//2 arguements, no debug
        file = argv[1];
    }

    if( 3 == argc ) { //three arguements provided with debug
        if( argv[1][0] == '-' && argv[1][1] == 'd' ) {
            debugMode = true;  // ./a.out -d mazeInput.txt
            file = argv[2];
        }
        else if(argv[2][0] == '-' && argv[2][1] == 'd') {
            debugMode = true;  // ./a.out mazeInput.txt -d
            file = argv[1];
        }
    }


    m1 = createMaze(file); //initialize maze

    printf("Input Maze\n");
    printf ("size: %d, %d\n", m1.xsize, m1.ysize);
    printf ("start: %d, %d\n", m1.xstart, m1.ystart);
    printf ("end: %d, %d\n", m1.xend, m1.yend);

    printMaze(m1);

    stack = solve(m1, debugMode);

    if(stack == NULL) { //nothing on stack
        printf("\n This maze is unsolvable!!!\n");
    }
    else {
        px= -1; //previous x and y set to -1 as to not be in maze
        py= -1;

        temp = stack;

        while(temp != NULL) {
            x = temp->x;
            y = temp->y;
            if(m1.array[x][y] != 'e' &&  m1.array[x][y] != 's') {
                if(px == x+1)
                    m1.array[x][y] = 'V'; //down
                else if (px == x-1)
                    m1.array[x][y] = '^'; //up
                else if(py == y+1)
                    m1.array[x][y] = '>'; //right
                else if(py == y-1)
                    m1.array[x][y] = '<'; //left
                else {
                    printf("\nValue not available in stack (%d, %d)\n", x,y);
                }
            }
            px = x; //set previous x and y to the node's values
            py = y;
            temp = temp->next; //move along stack
        }
    }
    printMaze(m1); // reprint maze with solution
    printf("\nSolution coordinates: \n");
    printSt( stack);
    printf("\n");

    rmStack(&stack);
    rmMaze(m1);

    return(0);
}