寻找一个图中独立子图的个数
2015-07-04 12:39
267 查看
#include <stdio.h> int map[51][51] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 3}, {0, 3, 0, 2, 0, 1, 2, 1, 0, 1, 2}, {0, 4, 0, 1, 0, 1, 2, 3, 2, 0, 1}, {0, 3, 2, 0, 0, 0, 1, 2, 4, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0}, {0, 0, 1, 2, 1, 0, 1, 5, 4, 3, 0}, {0, 0, 1, 2, 3, 1, 3, 6, 2, 1, 0}, {0, 0, 0, 3, 4, 8, 9, 7, 5, 0, 0}, {0, 0, 0, 0, 3, 7, 8, 6, 0, 1, 2}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0} }; int book[51][51] = {0}; int sum = 0; int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; void dfs(int x, int y,int color) { int k; int tx, ty; map[x][y] = color; for (k = 0; k <= 3; k++) { tx = x + next[k][0]; ty = y + next[k][1]; if (tx < 1 || tx > 10 || ty < 1 || ty > 10) continue; if (map[tx][ty] > 0 && book[tx][ty] == 0) { sum++; book[tx][ty] = 1; dfs(tx, ty, color); //book[tx][ty] = 0; } } return; } int main() { int i,j; int num = 0; // for (i = 1; i <= 10; i++) for (j = 1; j <= 10; j++) { if (map[i][j] > 0) { num--; book[i][j] = 1; dfs(i, j, num); } } for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) { printf("%3d ", map[i][j]); } printf("\n"); } printf("小岛总共有%d个小岛\n",-num); getchar(); getchar(); return 0; }
相关文章推荐
- 《Visual Studio 程序员箴言》读书笔记
- 认真学习shell的第一天-数学运算
- uedit学习小结
- C# Windows Schedule task此次收购task下一步执行时间
- 避免多重包含
- iphone6 wifi自动断开 tplink
- final 子类禁止重写
- Dynamics CRM 2015 Update 1 系列(3): API的那些事 - Old APIs VS New APIs
- mysql增量ID 启动值更改方法
- GO语言练习:不定参数函数
- 表单元素
- [华为机试练习题]51.数列求和
- sed 指定行范围匹配
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
- UIScrollView 期本使用方法
- window中使用ftp连接linux
- sql优化
- linux进程的用户ID
- VC Edit控件自动换行显示方法
- ARM体系结构与编程 阅读笔记P207