TYVJ 1127 统计细胞数 by C++
1 #include<iostream> 2 using namespace std; 3 char a[100][100]; 4 int x[10000]; 5 int y[10000]; 6 bool vis[100][100]; 7 int n=0,m=0,tot=0,stx,sty; 8 void get_input() 9 { 10 cin >> n >> m; 11 for (int i=0;i<n;i++) 12 for (int j=0;j<m;j++){ 13 cin >> a[i][j]; 14 vis[i][j]=false; 15 } 16 } 17 void bfs(int stx,int sty) 18 { 19 int head=0,tail=1,posx,posy,nowx,nowy,prex,prey; 20 tot++; 21 posx=stx;posy=sty; 22 x[1]=posx;y[1]=posy; 23 vis[stx][sty]=true; 24 while (head<tail){ 25 head++; 26 head %= 10000; 27 nowx=x[head];nowy=y[head]; 28 prex=nowx-1;prey=nowy; 29 if (prex>=0){ 30 if (a[prex][prey]!='0'&&!vis[prex][prey]) 31 {vis[prex][prey]=true; 32 tail++; 33 tail %= 10000; 34 x[tail]=prex;y[tail]=prey;} 35 } 36 prex=nowx+1;prey=nowy; 37 if (prex<n){ 38 if (a[prex][prey]!='0'&& !vis[prex][prey]) 39 {vis[prex][prey]=true; 40 tail++; 41 tail %= 10000; 42 x[tail]=prex;y[tail]=prey;} 43 } 44 prex=nowx;prey=nowy-1; 45 if (prey>=0){ 46 if (a[prex][prey]!='0'&& !vis[prex][prey]) 47 {vis[prex][prey]=true; 48 tail++; 49 tail %= 10000; 50 x[tail]=prex;y[tail]=prey;} 51 } 52 prex=nowx;prey=nowy+1; 53 if (prey<m){ 54 if (a[prex][prey]!='0'&& !vis[prex][prey]) 55 {vis[prex][prey]=true; 56 tail++; 57 tail %= 10000; 58 x[tail]=prex;y[tail]=prey;} 59 } 60 } 61 } 62 int main() 63 { 64 get_input(); 65 for (int i=0;i<n;i++) 66 for (int j=0;j<m;j++){ 67 if (a[i][j]!='0'&& !vis[i][j]) bfs(i,j); 68 } 69 cout << tot <<'\n'; 70 }
呃 刚开始用C++ 很多定义不是很熟悉 所以用了最原始的BFS加上最原始的写法,程序无论是写法还是算法没有做任何优化……
过两天我熟悉了C++的时候会回过头来把这个代码精简的。。。