Why compile error?

Write here if you have problems with your C++ source code

Moderator: Board moderators

Post Reply
User avatar
ImLazy
Experienced poster
Posts: 215
Joined: Sat Jul 10, 2004 4:31 pm
Location: Shanghai, China

Why compile error?

Post by ImLazy » Wed Feb 08, 2006 8:34 am

Code: Select all

#include <cstdio>
#include <cstring>

using namespace std;

const int MAX_ROW = 50;
const int MAX_VERTEX = MAX_ROW * MAX_ROW * 2 + 2;

struct Bank {
    int x;
    int y;
};

struct Edge {
    int from;
    int to;
    int weight;
    Edge* next;
};

Edge* g_map[MAX_VERTEX];
Bank g_bank[MAX_ROW * MAX_ROW];
int g_bankCount;
int g_rowCount, g_colCount;
int g_source, g_sink;
int g_path[MAX_VERTEX];

int headx(int x, int y) {
    return (x * g_rowCount + y) * 2 + 1;
}

int tailx(int x, int y) {
    return headx(x, y) + 1;
}

void addedge(int from, int to, int weight) {
    Edge* newedge = new Edge;
    newedge->from = from;
    newedge->to = to;
    newedge->weight = weight;
    newedge->next = g_map[from];
    g_map[from] = newedge;
}

void addweight(int from, int to, int weight) {
    Edge* ptr = g_map[from];
    while(ptr != NULL){
        if(ptr->to == to) {
            ptr->weight += weight;
            return;
        }
        ptr = ptr->next;
    }
    /*if there is no connection between these*/
    addedge(from, to, weight);
}

void clear_map() {
    for (int i = 0; i < MAX_VERTEX; i++) {
        Edge* p = g_map[i];
        while (p != NULL) {
            Edge* pre = p;
            p = p->next;
            delete pre;
        }
        g_map[i] = NULL;
    }
}

void make_graph() {
    clear_map();
    g_source = 0;
    g_sink = g_rowCount * g_colCount * 2 + 1;

    for(int i = 0; i < g_rowCount; i++) {
        for(int j = 0; j < g_colCount; j++) {
            addedge(headx(i, j), tailx(i, j), 1);
        }
    }
    for(int i = 1; i < g_rowCount; i++) {
        for(int j = 0; j < g_colCount; j++) {
            addedge(tailx(i - 1, j), headx(i, j), 1);
            addedge(tailx(i, j), headx(i - 1, j), 1);
        }
    }
    for(int i = 0; i < g_rowCount; i++) {
        for(int j = 1; j < g_colCount; j++){
            addedge(tailx(i, j - 1), headx(i, j), 1);
            addedge(tailx(i, j), headx(i, j - 1), 1);
        }
    }
    for(int i = 0; i < g_bankCount; i++) {
        addedge(g_source, headx(g_bank[i].x, g_bank[i].y), 1);
    }
    for(int i = 0; i < g_rowCount; i++){
        addedge(tailx(i, 0), g_sink, 1);
        addedge(tailx(i, g_colCount - 1), g_sink, 1);
    }
    for(int i = 1; i < g_colCount - 1; i++) {
        addedge(tailx(0, i), g_sink, 1);
        addedge(tailx(g_rowCount - 1, i), g_sink, 1);
    }
}

int bfs() {
    int queue[MAX_VERTEX], parent[MAX_VERTEX], visited[MAX_VERTEX];
    int front=0, tail=1,;
    Edge* ptr;
    memset(visited, 0, sizeof(visited));
    queue[front] = g_source;
    parent[front] = -1;
    visited[g_source] = 1;
    while(front < tail){
        int now = queue[front];
        for(ptr = g_map[now]; ptr != NULL; ptr = ptr->next) {
            if(ptr->weight <= 0) {
                continue;
            }
            if(visited[ptr->to]) {
                continue;
            }
            parent[tail] = front;
            queue[tail] = ptr->to;
            visited[ptr->to] = 1;
            if(ptr->to == g_sink) {
                goto FIND_PATH;
            }
            tail++;
        }
        front++;
    }
    return 0;

FIND_PATH:
    int result = -1;
    for(int i = tail; i >= 0; i = parent[i]) {
        result++;
        g_path[result] = queue[i];
    }
    return result;
}

void maxflow() {
    int flow = 0;
    int len = bfs();
    while (len > 0) {
        /*reverse*/
        for(int i = 1;i < len; i++) {
            addweight(g_path[i], g_path[i - 1], -1);
            addweight(g_path[i - 1], g_path[i], 1);
        }
        flow++;
        len = bfs();
    }
    if(flow == g_bankCount) {
        printf("possible\n");
    }
    else {
        printf("not possible\n");
    }
}

int main() {
    memset(g_map, 0, sizeof(g_map));

    int N;
    scanf("%d", &N);
    while (N > 0) {
        scanf("%d %d %d", &g_rowCount, &g_colCount, &g_bankCount);
        for(int i = 0; i < g_bankCount; i++) {
            scanf("%d %d", &g_bank[i].x, &g_bank[i].y);
            g_bank[i].x--;
            g_bank[i].y--;
        }
        make_graph();
        maxflow();
        N--;
    }
    return 0;
}
I stay home. Don't call me out.

User avatar
shamim
A great helper
Posts: 498
Joined: Mon Dec 30, 2002 10:10 am
Location: Bozeman, Montana, USA

Post by shamim » Wed Feb 08, 2006 9:41 am

Code: Select all

int bfs() { 
    int queue[MAX_VERTEX], parent[MAX_VERTEX], visited[MAX_VERTEX]; 
    int front=0, tail=1,; 
    Edge* ptr;
Remove the comma in "tail=1,".

User avatar
ImLazy
Experienced poster
Posts: 215
Joined: Sat Jul 10, 2004 4:31 pm
Location: Shanghai, China

Post by ImLazy » Wed Feb 08, 2006 3:51 pm

But why is it compiled successfully in Dev-C++ 4.9.9.2?
I stay home. Don't call me out.

chunyi81
A great helper
Posts: 293
Joined: Sat Jun 21, 2003 4:19 am
Location: Singapore

Post by chunyi81 » Thu Feb 09, 2006 6:21 am

Hmmm.... This is strange. I get compile error as well with your code when I compile with g++ 2.95.3 and g++ 3.3.2. Dev-C++ uses gcc/g++ as well, if I'm not mistaken.

User avatar
ImLazy
Experienced poster
Posts: 215
Joined: Sat Jul 10, 2004 4:31 pm
Location: Shanghai, China

Post by ImLazy » Fri Feb 10, 2006 11:04 am

For instance, this code:

Code: Select all

int main() {
    int a,;
    return 0;
}
It is compile successfully with MinGW 5.0.0 (g++ 3.4.4) which is the latest g++ version;
But it gets compile error with former version of g++;
I stay home. Don't call me out.

User avatar
Krzysztof Duleba
Guru
Posts: 584
Joined: Thu Jun 19, 2003 3:48 am
Location: Sanok, Poland
Contact:

Post by Krzysztof Duleba » Fri Feb 10, 2006 4:04 pm

Just to make it clear: g++ 3.4.4 is not even remotely the latest version.
http://gcc.gnu.org/
For millions of years, mankind lived just like the animals. Then something happened which unleashed the power of our imagination. We learned to talk and we learned to listen...

User avatar
ImLazy
Experienced poster
Posts: 215
Joined: Sat Jul 10, 2004 4:31 pm
Location: Shanghai, China

Post by ImLazy » Fri Feb 10, 2006 4:54 pm

I download the g++ here: http://www.mingw.org/download.shtml
I stay home. Don't call me out.

Post Reply

Return to “C++”