做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...