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 |
ft,sample 都没错,好心人给些数据啊,谢谢了了!!!!#include<stdio.h> #include<stdlib.h> #define MAX 100 struct direction{ int row ; int col ; }dir[8] ; void make_dir( void ) { dir[7].row= dir[0].row= dir[1].row =-1 ; dir[5].row= dir[4].row = dir[3].row = 1 ; dir[6].row= dir[2].row = 0 ; dir[7].col= dir[6].col = dir[5].col = -1 ; dir[1].col= dir[2].col = dir[3].col = 1 ; dir[0].col= dir[4].col = 0 ; } struct position{ int r; int col; }stack[MAX]; char matrix[MAX+1][MAX+1]; int visited[MAX+1][MAX+1]; int row,column; int firstadjvex(int a,int b,int *x,int *y) { int k; int nx,ny; for(k=0;k<8;k++) { nx=a+dir[k].row; ny=b+dir[k].col; if(nx>=1&&nx<=row&&ny>=1&&ny<=column&&matrix[nx][ny]=='@'&&visited[nx][ny]==0) { *x=nx; *y=ny; return 1; } } *x=0; *y=0; return 0; } int nextadjvex(int x,int y,int *nx,int *ny) { int k; int tempx,tempy; for(k=0;k<8;k++) { tempx=x+dir[k].row; tempy=y+dir[k].col; if(tempx>=1&&tempx<=row&&tempy>=1&&tempy<=column&&matrix[tempx][tempy]=='@'&&visited[tempx][tempy]==0) { *nx=tempx; *ny=tempy; return 1; } } *nx=0; *ny=0; return 0; } int findunvisited(int *x,int *y) { int i,j; for(i=1;i<=row;i++) for(j=1;j<=column;j++) if(!visited[i][j]&&(matrix[i][j]=='@')) { *x=i; *y=j; return 1; } *x=0; *y=0; return 0; } int search() { int i,j; int x,y; int num; int front; int rear; int adjx,adjy; for(i=1;i<=row;i++) for(j=1;j<=column;j++) visited[i][j]=0; num=0; while(findunvisited(&x,&y)) { visited[x][y]=1; front=rear=MAX; num++; front--; rear--; stack[front].r=x; stack[front].col=y; while(rear<=front) { x=stack[front].r; y=stack[front].col; front--; for(firstadjvex(x,y,&adjx,&adjy);adjx&&adjy;nextadjvex(x,y,&adjx,&adjy)) { visited[adjx][adjy]=1; rear--; stack[rear].r=adjx; stack[rear].col=adjy; } } } return num; } int init() { int i,j; scanf("%d %d",&row,&column); if(row==0) return 0; getchar(); for(i=1;i<=row;i++) { for(j=1;j<=column;j++) scanf("%c",&matrix[i][j]); getchar(); } return 1; } main() { make_dir( ); while(init()) { printf("%d\n",search()); } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator