|
链接在这里~http://acm.hdu.edu.cn/showproblem.php?pid=1035 #include <iostream>
using std::cin; using std::cout;
char instructionMap[10][10];
bool flag[10][10] = {0};
int countStep[10][10] = {0};
int count = -1;
int loopcount = 0;
int row, column,startPos;
bool isExit = false;
bool isLoop = false;
void dfsSearch(int rowPos, int colPos){
count++;
if (rowPos < 0 || rowPos >= row || colPos < 0 || colPos > column){
isExit = true;
return;//成功出去
}
else if (flag[rowPos][colPos]){//已经走过的点,说明进入循环
isLoop = true;
loopcount = count - countStep[rowPos][colPos];
return;
}
else{
countStep[rowPos][colPos] = count;
flag[rowPos][colPos] = 1;
switch (instructionMap[rowPos][colPos]){
case ""E"":
dfsSearch(rowPos, colPos + 1);
break;
case ""S"":
dfsSearch(rowPos + 1, colPos);
break;
case ""W"":
dfsSearch(rowPos, colPos - 1);
break;
case ""N"":
dfsSearch(rowPos - 1, colPos);
break;
}
}
}
int main()
{
while (cin >> row >> column >> startPos){
isExit = false;
isLoop = false;
count = -1;
memset(flag, 0, sizeof(flag));
loopcount = 0;
if (row == 0 || column == 0){
break;
}
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
cin >> instructionMap[i][j];
}
}
dfsSearch(0, startPos - 1);
if (isExit){
cout << count << " step(s) to exit";
}
else if (isLoop){
cout << count - loopcount << " step(s) before a loop of " << loopcount << " step(s)";
}
cout << std::endl;
}
return 0;
}
|
|
| 10分 |
Problem : 1035 ( Robot Motion ) Judge Status : Accepted
RunId : 8641389 Language : C++ Author : huifeidmeng
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include<cstdio>
#include<cstring>
const int maxn=1000;
char maze[11][maxn];
int record[11][maxn];
int main()
{
int r,c,pos,i,j;
while(scanf("%d%d",&r,&c),r+c)
{
scanf("%d",&pos);
memset(maze,""\0"",sizeof maze);
memset(record,0,sizeof record);
for( i=0;i<r;i++)
{
scanf("%s",maze[i]);
}
int newr=0,newc=pos-1;
bool judge=true;
while(newc>=0&&newr>=0&&maze[newr][newc]!=0)
{
record[newr][newc]++;
if(record[newr][newc]==3)
{
judge=false;
break;
}
switch(maze[newr][newc])
{
case ""N"": newr--; break; //up
case ""S"": newr++; break; //down
case ""E"": newc++; break; //right
case ""W"": newc--; break; //left
}
}
int step=0,circle=0;
for( i=0;i<r;i++)
{
for( j=0;j<c;j++)
{
if(record[i][j]==1)
step++;
else
if(record[i][j]!=0)
circle++;
}
}
if(judge)
printf("%d step(s) to exit\n",step);
else
printf("%d step(s) before a loop of %d step(s)\n",step,circle);
}
return 0;
}#include<cstdio>
#include<cstring>
const int maxn=1000;
char maze[11][maxn];
int record[11][maxn];
int main()
{
int r,c,pos,i,j;
while(scanf("%d%d",&r,&c),r+c)
{
scanf("%d",&pos);
memset(maze,""\0"",sizeof maze);
memset(record,0,sizeof record);
for( i=0;i<r;i++)
{
scanf("%s",maze[i]);
}
int newr=0,newc=pos-1;
bool judge=true;
while(newc>=0&&newr>=0&&maze[newr][newc]!=0)
{
record[newr][newc]++;
if(record[newr][newc]==3)
{
judge=false;
break;
}
switch(maze[newr][newc])
{
case ""N"": newr--; break; //up
case ""S"": newr++; break; //down
case ""E"": newc++; break; //right
case ""W"": newc--; break; //left
}
}
int step=0,circle=0;
for( i=0;i<r;i++)
{
for( j=0;j<c;j++)
{
if(record[i][j]==1)
step++;
else
if(record[i][j]!=0)
circle++;
}
}
if(judge)
printf("%d step(s) to exit\n",step);
else
printf("%d step(s) before a loop of %d step(s)\n",step,circle);
}
return 0;
}
|
#include <stdio.h>
#include <string.h>
int row, col;
int startCol;
char instruct[15][15];
int flag[15][15];
int check(int x, int y)
{
if(x>=0 && x<row && y>=0 && y<col)
return 1;
return 0;
}
void search()
{
char tempC;
//int step = 0;
flag[0][startCol-1] = 1;
int curRow = 0;
int curCol = startCol-1;
int tx,ty;
while(1)
{
tempC = instruct[curRow][curCol];
if(tempC == ""W"")
{
tx = curRow;
ty = curCol-1;
} else if(tempC == ""E"") {
tx = curRow;
ty = curCol + 1;
} else if(tempC == ""N"") {
tx = curRow - 1;
ty = curCol;
} else if(tempC == ""S"") {
tx = curRow + 1;
ty = curCol;
}
//step++;
if(!check(tx, ty))
{
printf("%d step(s) to exit\n",flag[curRow][curCol]);
return;
}
if(flag[tx][ty])
{
break;
}
flag[tx][ty] = flag[curRow][curCol]+1;
curRow = tx;
curCol = ty;
}
flag[curRow][curCol]++;
//flag[tx][ty]++;
printf("%d step(s) before a loop of %d step(s)\n",flag[tx][ty]-1,flag[curRow][curCol]-flag[tx][ty]);
}
int main()
{
int i;
while(scanf("%d%d",&row, &col)!=EOF && row && col)
{
scanf("%d",&startCol);
for(i=0; i<row; i++)
{
scanf("%s",instruct[i]);
}
memset(flag,0, sizeof(flag));
search();
}
return 0;
}
AC代码参考下。 |
|
|
mxway有试一下我贴出来的代码没~实在是找不出什么漏洞啊~纠结~
|
|
| 30分 |
你的代码我也没看出来有什么问题。 |
if (rowPos < 0 || rowPos >= row || colPos < 0 || colPos > column){
isExit = true;
return;//成功出去
}
这里有问题!应该是colPos >= column~ |
|