Node *build_tree(Puzzle *instance){
    int recheck = 1;
    while(recheck == 1){
            int i;
            recheck = 0;
            for(i=0;i<instance->size*instance->size;i++){
                if(get_number_of_possibilities(&instance->cells[i]) == 1){
                    recheck = 1;
                    int value = get_possibility(&instance->cells[i], 0);
                    set_cell_value((&instance->cells[i])->row, (&instance->cells[i])->col, instance, value);
                }
            }
    }

    printf("Building Tree..\n");
     
    // sort cells in increasing order of possibility list size
    int *hash = hash_cells(instance);
    Cell *sorted_list = convert_hash_to_list(hash, instance);

    print_puzzle(instance);
    
    struct timeval start, end;
    gettimeofday(&start, NULL);

    Node root = {instance, 0, 0, NULL};
    bfs(&root, sorted_list);

    gettimeofday(&end, NULL);
    
    printf("\n\nAlgorithm's computational part duration :%ld\n", \
                                          ((end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec)));


}
Node *assign_children(Puzzle *instance, Cell *cell, int *number_of_children){
    int i;
    *number_of_children = get_number_of_possibilities(cell); 

    Puzzle *children = malloc(sizeof(Puzzle)**number_of_children);
    Node *children_node = malloc(sizeof(Node)**number_of_children);
    for(i=0;i<*number_of_children;i++){
        children[i].size = instance->size;
        int j, k;
        children[i].cells = malloc(sizeof(Cell)*instance->size*instance->size);
        for(j=0;j<instance->size*instance->size;j++){
                children[i].cells[j].possibility_list = malloc(sizeof(int)*(instance->size+1));
            for(k=0;k<=instance->size;k++){
                memcpy(&children[i].cells[j].possibility_list[k], &instance->cells[j].possibility_list[k], sizeof(int));
            }
            memcpy(&children[i].cells[j].value, &instance->cells[j].value, sizeof(int));
        }
        set_cell_value(cell->row, cell->col, &children[i], get_possibility(cell, i));
        children_node[i].instance = &children[i];
        children_node[i].children = NULL;
    }
    
    return children_node;
}
示例#3
0
TEST(GET_CELL_VALUE,VALUE)
{
	ASSERT_EQ(0,set_cell_value("C:\\Users\\l00219108\\Documents\\Visual Studio 2010\\Projects\\csvapi\\Debug\\test.csv", 1, 2, "abc"));
	ASSERT_EQ(0,get_cell_value("C:\\Users\\l00219108\\Documents\\Visual Studio 2010\\Projects\\csvapi\\Debug\\test.csv", 1, 2, value));
	EXPECT_STREQ("abc",value);
}