| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大家帮我看下代码最后的释放二维数组部分有什么问题吧 谢谢了#include <iostream>
using namespace std;
void move(int** grid, int &r, int &c, int** visited)
{
switch(grid[r][c])
{
case 0:r -= 1;break;
case 1:c += 1;break;
case 2:r += 1;break;
case 3:c -= 1;break;
}
visited[r][c]++;
}
void solve(int** grid, int r, int c, int entry, int** visited)
{
int curr = 0;
int curc = entry - 1;
visited[curr][curc] = 1;
int cnt = 0;
while(1)
{
move(grid, curr, curc, visited);
cnt++;
if (curr < 0 || curr >= r || curc < 0 || curc >= c)
{
cout << cnt << " step(s) to exit" << endl;
return;
}
if (visited[curr][curc] == 2)
{
int loopcnt = 0;
int tempx = curr;
int tempy = curc;
while(visited[curr][curc] != 3)
{
move(grid, curr, curc, visited);
loopcnt++;
}
cout << cnt - loopcnt << " step(s) before a loop of " << loopcnt << " step(s)"<<endl;
return;
}
}
}
int main()
{
freopen("in.txt", "r", stdin);
int** grid;
int** visited;
int r, c, entry;
int i, j;
char dir;
while((cin >> r >> c >> entry) && (r != 0) && (c != 0) && (entry != 0))
{
grid = new int*[r];
visited = new int*[r];
for (i = 0; i < r; i++)
{
grid[i] = new int[c];
visited[i] = new int[c];
for (j = 0; j < c; j++)
{
visited[i][j] = 0;
cin >> dir;
switch(dir)
{
case 'N':grid[i][j] = 0;break;
case 'E':grid[i][j] = 1;break;
case 'S':grid[i][j] = 2;break;
case 'W':grid[i][j] = 3;break;
}
}
}
solve(grid, r, c, entry, visited);
for (i = 0;i < r; i++)
{
delete []grid[i];
delete []visited[i];
}
delete []grid;
delete []visited;
}
return 0;
}
RT 最后释放那块有问题 拿题目的第一组数据 就只能i=0 1 的时候释放 此时r=3 i++后变为2 结果就停那不动了。。。
而第二组数据可以释放
最后的结果是RE 。。没找出原因。。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator