poj1129
2016-03-07 15:14
411 查看
感觉没有用到什么算法,直接模拟就是
题目大意:无线网络中n个结点,每个结点都需要用信道来转发信息,但是为了避免干扰,邻居结点不能采用同一个信道,问对于给定的n和邻居关系图,最少需要多少信道?
题目分析:A:BCD表示结点A和BCD相邻,可以用数组0~25来替代字母A~Z,即0:123;这方便我们用二维数组来表示相邻关系,例如:net[2][4]=1:表示2和4相邻
代码如下:
题目大意:无线网络中n个结点,每个结点都需要用信道来转发信息,但是为了避免干扰,邻居结点不能采用同一个信道,问对于给定的n和邻居关系图,最少需要多少信道?
题目分析:A:BCD表示结点A和BCD相邻,可以用数组0~25来替代字母A~Z,即0:123;这方便我们用二维数组来表示相邻关系,例如:net[2][4]=1:表示2和4相邻
代码如下:
import java.util.Scanner; public class Main_1129_1 { static int net[][]; static int n; static int ch[]; public static void main(String[] args) { Scanner in=new Scanner(System.in); n=in.nextInt(); while(n!=0) { net=new int ; ch=new int ; for(int i=0;i<n;i++) { String line=in.next(); for(int k=2;k<line.length();k++) { net[i][(int)(line.charAt(k)-65)]=1; } } solve(0); int m=ans(); if(m==1) { System.out.println(m+" channel needed."); }else { System.out.println(m+" channels needed."); } n=in.nextInt(); } } static void solve(int id) { if(id==n) return; for(int i=1;i<=n;i++) { if(!judge(id, i)) continue; // System.out.println("id="+id+" i="+i); ch[id]=i; solve(id+1); return; } } static boolean judge(int id,int x) { for(int i=0;i<n;i++) { if(net[id][i]==1 && ch[i]==x) return false; } return true; } static int ans() { int max=1; for(int i=0;i<n;i++) { if(ch[i]>max) max=ch[i]; } return max; } }
相关文章推荐
- Apache Shiro 使用手册(三)Shiro 授权
- iOS开发---在 iOS 应用中直接跳转到 AppStore 的方法
- C++函数的重载、内联和默认参数
- Mahout-distrubution-0.9安装教程
- 宝典练习2之求两个数组的交集
- iOS CAShaperLayer 层详解
- Java内部类
- C++矩阵运算库推荐
- Android命名规范
- webstorm 高亮显示某一种类型文件
- 互联网环境下服务提供的模式
- JavaScript之变量、作用域
- 属于你的第一个Java程序
- PHP常用函数收藏
- dump_stack( )
- Android编程使用HTTP协议与TCP协议实现上传文件的方法
- ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
- LVS负载均衡之lvs高可用实例部署(案例篇)
- sip测试
- 用go语言进行冒泡排序法