求大神,帮我看看这是什么意思
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#define M 25
char map[M][M];
bool mark[M][M];
int move[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int m,n,i,j,counter;
struct node
{
int x,y;
}p,q;
using namespace std;
int main()
while(scanf("%d%d",&n,&m),m+n)//列,行
{
getchar();
for(i=0;i<m;i++)
gets(map[i]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(map[i][j]=='@')
{
q.x=i,q.y=j;
break;
}
memset(mark,true,sizeof(mark)),mark[q.x][q.y]=false;
queue<node>Q,Q.push(q);
counter=1;
while(!Q.empty())
{
q=Q.front(),Q.pop();
for(i=0;i<4;i++)
{
p.x=q.x+move[i][0],p.y=q.y+move[i][1];
if(p.x>=0&&p.x<m&&p.y>=0&&p.y<n&&mark[p.x][p.y]&&map[p.x][p.y]=='.')
{
mark[p.x][p.y]=false;
counter++;
Q.push(p);
}
}
}
printf("%d\n",counter);
}
return 0;
}
[解决办法]
我把楼主你的代码改了一下...不得不说下楼主的代码风格,套用一句流行语,"这一坨太恶心了T_T"...
不仅C与C++代码混用(太严重了,难道你想练练这两种语言?),而且变量名定义的比较...无语.
#include<iostream>using namespace std;const int size=25,move[4][2]={{1,0},{0,1},{-1,0},{0,-1}};struct node{ int x,y;}table[size*size];char map[size][size],mark[size][size];int op,cl,m,n,counter;bool check(int x,int y){ return (x>=0 && x<=m && y>=0 && y<=n);}void Init(){ for(int i=0;i<size;i++) for(int j=0;j<size;j++){ map[i][j]=0;mark[i][j]=0; } op=1;cl=0;}int main(){ while(cin>>n>>m && n && m){//n is column,m is row Init(); for(int i=0;i<m;i++) for(int j=0;j<n;j++){ cin>>map[i][j]; if(map[i][j]=='@'){ counter=1; mark[i][j]=1; table[op].x=i;table[op].y=j; } } while(cl<op){ cl++; for(int i=0;i<4;i++){ int nx=table[cl].x+move[i][0],ny=table[cl].y+move[i][1]; if(check(nx,ny) && !mark[nx][ny] && map[nx][ny]=='.'){ counter++;mark[nx][ny]=1; op++; table[op].x=nx;table[op].y=ny; } } } cout<<counter<<endl; } system("pause"); return 0;}
[解决办法]
刚自己写的程序,楼主看看行不行~
#include "stdlib.h"
#include "stdio.h"
int find(int i,int j,int locx,int locy,char **array);
void show(int i,int j,char **array);
int static stepnum;
int main(){
int i=0,j=0;
scanf("%d %d",&i,&j);
char **array;
while(i!=0 || j!=0){
array=(char**)malloc(i*sizeof(char*));
int k=0;
while(k<j){
array[k]=(char*)malloc(j*sizeof(char));
k++;
}
int n=0,m=0,locx=0,locy=0;
fflush(stdin);
while(n<j){
while(m<i){
scanf("%c",&array[n][m]);
if(array[n][m]=='@'){
locx=n;
locy=m;
}
m++;
}
scanf("%c",&array[n][m]);
m=0;
n++;
}
//show(i,j,array);
int max=0;
max=find(i,j,locx,locy,array);
printf("%d\n",max);
stepnum=0;
scanf("%d %d",&i,&j);
}
return 0;
}
int find(int i,int j,int locx,int locy,char **array){
printf("\n");
array[locx][locy]='0';
show(i,j,array);
stepnum++;
if((locx-1)>=0 && array[locx-1][locy]=='.'){//goup
find(i,j,locx-1,locy,array);
}
if((locx+1)<j && array[locx+1][locy]=='.'){//godown
find(i,j,locx+1,locy,array);
}
if((locy+1)<i && array[locx][locy+1]=='.'){//gogoright
find(i,j,locx,locy+1,array);
}
if((locy-1)>=0 && array[locx][locy-1]=='.'){//goleft
find(i,j,locx,locy-1,array);
}
return stepnum;
}
void show(int i,int j,char **array){
int n=0,m=0;
while(n<j){
while(m<i){
printf("%c",array[n][m]);
m++;
}
printf("\n");
m=0;
n++;
}
}