sicily 1215 脫離地牢

2021-06-27 21:22:57 字數 2195 閱讀 8032

做sicily 1215脫離地牢 這一題,一直restrict function,都快崩潰了。

最後發現是記憶體洩露,就是new出來的東西沒有及時delete導致的。

具體是在廣度優先搜尋的時候,每找一次鄰居就new出一些節點,有些節點已被visited了然後我直接忽略它們,實際上是得把它們delete掉的,還有就是pop出乙個節點後,在處理完鄰居之後要把這個節點delete了

貼個**片段:

第32,35行便是要注意的地方。

執行效率:0秒,312kb

完整**如下:

// problem#: 1215

// submission#: 2642938

// the source code is licensed under creative commons attribution-noncommercial-sharealike 3.0 unported license

// uri:

#include#include#include#include#include#include#includeusing namespace std;

char **prison;

bool *visited;

unsigned char *dotperline = null;

unsigned char **onelinedot = null;

int n, m;

char dirparis[4][2] = ,,,};

char dirhelen[4][2];

int dotcount;

struct node

node* parent;

};int hashpoint(int x, int y)

//

p+=onelinedot[x][y-1];

return p;

}int hashnode(node* node)

//bool cmp(const node* a, const node* b)

//vectorgetadj(node* node)

else

newnode->step = node->step+1;

ret.push_back(newnode);

newnode->parent = node;}}

}return ret;

}bool ispass(node* node)

int bfs(node* node)

else

}

else

}delete node;

}return -1;

}int main()

for(int i = 0; i < n; i++)

char d[4];

cin >> d;

for(int i = 0; i < 4; i++)

} //find initial position

node* init = new node;

dotcount = 0;

for(int i = 0; i < n; i++)

for(int j = 0; j < m; j++)

else if(prison[i][j] == 'h')

else if(prison[i][j] == 'p')

}

for(int i = 1; i < n-1; i++)

}

int count = dotcount*dotcount;

visited = new bool[count];

memset(visited,0,count);

visited[hashnode(init)] = true;

int result = bfs(init);

if(result == -1)

cout << "impossible" << endl;

else

cout << result << endl;

for(int i = 0; i < n; i++)

delete prison;

delete dotperline;

delete onelinedot;

delete visited;}}

sicily 1215 脫離地牢

time limit 1 secs,memory limit 32 mb 在乙個神秘的國度裡,年輕的王子paris與美麗的公主helen在一起過著幸福的生活。他們都隨身帶有一塊帶磁性的陰陽魔法石,身居地獄的魔王satan早就想得到這兩塊石頭了,只要把它們熔化,satan就能吸收其精華大增自己的魔力。...

Sicily 1215 脫離地牢(BFS)

這道題按照題意直接bfs即可,主要要注意題意中的相遇是指兩種情況 一種是同時到達同一格仔,另一種是在移動時相遇,如paris在 1,2 而helen在 1,2 若下一步paris到達 1,1 而helen達到 1,2 這種情況也算是相遇。遇到熔漿 4546 if visit paris x pari...

1215 脫離地牢

此題有個巨大的吐槽的地方就是最終狀態的判定有兩種情況,相遇或者到乙個格仔裡,不要忘記當隊列為空要判定狀態為結束。還有可以用方向來代表陣列的下標,是 更具有可讀性。include include include using namespace std intconst maxn 50 char map...