首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求大神,帮小弟我看看这是什么意思

2012-09-15 
求大神,帮我看看这是什么意思#includecstdio#includecstring#includeiostream#includequeue#defin

求大神,帮我看看这是什么意思
#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++代码混用(太严重了,难道你想练练这两种语言?),而且变量名定义的比较...无语.

C/C++ code
#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++;
}

}

热点排行